与えられているのは次のコードです。値が提供されていないときに、値を「price」から「newprice」にコピーしたい。
import pandas as pd
articles = {"number": ["111", "222", "333"],
"price": [12.46, 33.66, 43.35],
"name": ["Article1", "Article2", "Article3"],
"newprice": [11.24, None, None]}
df = pd.DataFrame(articles)
print(df)
# Select empty entries
mask = df['newprice'].isnull()
# Version 1 (not working)
df.loc[mask, ['newprice']] = df.loc[mask, ['price']]
print(df)
# Output
# number price name newprice
# 0 111 12.46 Article1 11.24
# 1 222 33.66 Article2 NaN
# 2 333 43.35 Article3 NaN
# Version 2 (working)
df.loc[mask, ['newprice']] = df['price']
print(df)
# Output
# number price name newprice
# 0 111 12.46 Article1 11.24
# 1 222 33.66 Article2 33.66
# 2 333 43.35 Article3 43.35
バージョン1では、「newprice」列にまだNansがありますが、バージョン2では、値は意図したとおりにコピーされます。割り当ての両側を同じマスクでフィルタリングするので、完全に一致するはずです。私は、割り当ての両側がまったく同じ量の結果を提供する必要があることを知っていることを意味します。では、なぜバージョン1が機能しないのですか?
よろしくお願いします。
[]
両方loc
にある場合はここで問題があると思うので、1つの列を割り当てますDataFrame
。別の名前があるprice
対newprice
ので、失敗したが、。
解決策は[]
割り当てのために削除されSeries
ます:
df.loc[mask, 'newprice'] = df.loc[mask, 'price']
print(df)
number price name newprice
0 111 12.46 Article1 11.24
1 222 33.66 Article2 33.66
2 333 43.35 Article3 43.35
1つの列の割り当てDataFrame
は、条件なし(失敗)で類似しています。
df.loc[mask, 'newprice'] = df[['price']]
対割り当てSeries
(作業):
df.loc[mask, 'newprice'] = df['price']
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加