SettingWithCopy
悪名高い警告について多くの質問を見てきました。私はそれらのいくつかにあえて答えることさえしました。最近、このトピックに関する回答をまとめていて、データフレーム ビューの利点を提示したいと考えていました。なぜデータフレームビューを作成するのが良い考えなのか、またはそれが生成するものは何であれ、具体的なデモンストレーションを作成できませんでしたSettingWithCopy
検討df
df = pd.DataFrame([[1, 2], [3, 4]], list('ab'), list('AB'))
df
A B
x 1 2
y 3 4
そして、dfv
これはのコピーですdf
dfv = df[['A']]
print(dfv.is_copy)
<weakref at 0000000010916E08; to 'DataFrame' at 000000000EBF95C0>
print(bool(dfv.is_copy))
True
私は生成することができますSettingWithCopy
dfv.iloc[0, 0] = 0
ただし、dfv
変わった
print(dfv)
A
a 0
b 3
df
していない
print(df)
A B
x 1 2
y 3 4
そしてdfv
まだコピーです
print(bool(dfv.is_copy))
True
私が変わればdf
df.iloc[0, 0] = 7
print(df)
A B
x 7 2
y 3 4
しかしdfv
、変わっていません。しかし、私はdf
から参照することができますdfv
print(dfv.is_copy())
A B
x 7 2
y 3 4
質問
がdfv
独自のデータを保持し (つまり、実際にはメモリを節約しない)、警告にもかかわらず代入操作を介して値を代入する場合、なぜ最初から参照を保存して生成SettingWithCopyWarning
する必要があるのでしょうか?
具体的なメリットは何ですか?