SettingWithCopyWarning警告が起こる前提知識(View or Copy)

DataFrame

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…
タイトルとURLをコピーしました