import pandas as pd df = pd.DataFrame([[1, 11], [2, 11], [3, 33]], columns=[‘A’, ‘B’], index=[‘a’, ‘b’, ‘c’])
df[df[‘B’]==11][‘A’] = 4 #B列の値が11のA列の値に「4」を代入しようとします。
↑値に変化はない。
PandasはCopyを返すかViewを返すかの関数が明示的に決まっているわけでないので、問題を単純化できません。そのため、多くの人が悩みます。
最も基本的なSettingWithCopyWarning
が発生するパターンはChained Indexingと呼ばれる処理です。
下記のようにdf[df['B']==11]
という抽出処理に、さらに['A']
の抽出を重ねて(Chainして)います。
この場合はViewではなくCopyとなるみたいです。
また、警告が発生する以外にもそもそもパフォーマンスが悪く望ましくない書き方です。
Chained Indexing対処法
locプロパティを使います。
df.loc[df[‘B’]==11, [‘A’]] = 4
↑値が変化した
DataFrameでSettingWithCopyWarningの意味と対処法 - Qiita
Pandasの DataFrame でSettingWithCopyWarningの警告の意味と対処方法について書きます。DataFrame使っているとSettingWithCopyWarning…