86

データフレームの特定の列の各要素をスカラーで乗算するにはどうすればよいですか? (SOを調べてみましたが、正しい解決策が見つからないようです)

次のようなことをします:

df['quantity'] *= -1 # trying to multiply each row's quantity column with -1

私に警告を与える:

A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead

注:可能であれば、データフレームを反復処理して次のようなことをしたくありません...列全体に対する標準的な数学演算は、ループを記述する必要なしに可能である必要があると思います。

for idx, row in df.iterrows():
    df.loc[idx, 'quantity'] *= -1

編集

私は0.16.2パンダを実行しています

完全なトレース:

 SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead

See the the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy
  self.obj[item] = s
4

11 に答える 11

51

少し調べた後の答えは次のとおりです。

df.loc[:,'quantity'] *= -1 #seems to prevent SettingWithCopyWarning 
于 2015-11-18T12:50:22.863 に答える
5

少し古いですが、まだ同じ SettingWithCopyWarning を取得していました。これが私の解決策でした:

df.loc[:, 'quantity'] = df['quantity'] * -1
于 2016-05-18T17:40:04.460 に答える
4

試してみてくださいdf['quantity'] = df['quantity'] * -1

于 2015-11-17T22:23:23.537 に答える