pandasのDataFrameでSettingWithCopyWarningへの対処法

もんた
pandasでついやってしまうSettingWithCopyWarningの原因と対処法をメモしておきます。
目次

SettingWithCopyWarningが発生する例

import pandas as pd

# データフレームを作成
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})

# A列が1よりも大きい部分を取り出す。
subset = df[df['A'] > 1]

# このsubsetを使って以下を実行するとエラーになる。
subset['C'] = subset['B'] * 2

subsetがdfの一部分をコピーしたものでなく参照であるため、subsetに対する変更は元のdfに反映されてしまうというのがSettingWithCopyWarningで警告されます。これを防ぐためには、参照渡しを避けてコピーを渡すようにすればOKです。

解決策

import pandas as pd

df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})

# コピーを渡せば大丈夫
subset = df[df['A'] > 1].copy()
subset['C'] = subset['B'] * 2
もんた
この例は、subset[‘C’] = df[df[‘A’] > 1]][‘B’] * 2 のように連鎖インデクシング(Chained Indexing)が原因でSettingWithCopyWarningが発生しています。

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!

この記事を書いた人

データ分析関連を趣味にしています。

目次
閉じる