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

      2022/05/28

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

  

↑値が変化した

https://qiita.com/FukuharaYohei/items/b3aa7113d08858676910

 - DataFrame, python

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

在庫管理•販売管理•経理システム(AccessVBA、ExcelVBA)や簡単なアプリの作成もしています。同じ悩みを持つ方と情報を共有したいと思います。

Copyright© ちびrobo , 2022 All Rights Reserved.

WordPress Theme " Giraffe "