web-dev-qa-db-ja.com

pandasのスライスに値を設定する正しい方法

pandas dataframe:dataがあります。列["name"、 'A'、 'B']があります

私がやりたい(そしてうまくいく)ことは:

d2 = data[data['name'] == 'fred'] #This gives me multiple rows
d2['A'] = 0

これにより、fred行の列Aが0に設定されます。

indexes = d2.index
data['A'][indexes] = 0

ただし、どちらも同じ警告を表示します。

/Users/brianp/work/cyan/venv/lib/python2.7/site-packages/pandas/core/indexing.py:128: SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame

See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy

pandasはどうすればいいですか?

37
Brian Postow

これはパンダからの非常に一般的な警告です。これは、元のデータではなくコピースライスに書き込むため、混乱したチェーン割り当てのために元の列に適用されない可能性があることを意味します。これをお読みください post 。このSettingWithCopyWarningについて詳しく説明しています。あなたの場合、私はあなたが試すことができると思います

data.loc[data['name'] == 'fred', 'A'] = 0
65
Andreas Hsieh