SettingWithCopyWarning の犯人の特定
.loc[row_indexer,col_indexer] = value を使用して DataFrame を変更しようとすると、「SettingWithCopyWarning」持続します。この問題は、.copy() メソッドを呼び出さずに別の DataFrame から DataFrame スライスにアクセスすることが原因で発生します。
段階的なエラーの再現
次のコードを考えてみましょう。
import pandas as pd d = {'col1': [1, 2, 3, 4], 'col2': [3, 4, 5, 6]} df = pd.DataFrame(data=d) df['new_column'] = None df.loc[0, 'new_column'] = 100
最初は、警告はありません。ただし、df:
new_df = df.loc[df.col1 > 2]
のサブセットに基づいて新しい DataFrame を作成し、.loc:
new_df.loc[2, 'new_column'] = 100
を使用して新しい DataFrame を変更しようとすると、警告がトリガーされます。
解決策: サブセットから派生したデータ フレームに .copy() を使用する
この問題を解決するには、サブセットに基づいて新しい DataFrame を作成するときに、常に .copy() メソッドを使用します。既存の DataFrame のサブセット。
new_df_copy = df.loc[df.col1 > 2].copy() new_df_copy.loc[2, 'new_column'] = 100
.copy() を呼び出すと、サブセットの独立したコピーが作成され、値を変更するときの警告が回避されます。
以上がサブセットから派生した DataFrame を変更すると `SettingWithCopyWarning` が発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。