背景
pandasの特定行の値を更新したいが反映されないケースがあったので調査した。
調査結果
下記のミスケースでは、
master_df の一部を選択してコピーを作成し、そのコピーに対して "customer_name" の値が "XYZ" に変更されることを意味します。しかし、元の master_df は変更されず、警告も表示されません。つまり、意図した変更が元のデータフレームに反映されないという問題が発生します
元のデータフレームに対して、.loc や .iloc を使用してデータを選択し、その選択されたビューに対して変更を加える必要があります。
print(master_df[master_df["customer_id"] == "IK152942"]["customer_name"])
#ミスケース
master_df[master_df["customer_id"] == "IK152942"]["customer_name"] = "XYZ"
print(master_df[master_df["customer_id"] == "IK152942"]["customer_name"])
#成功ケース
master_df.loc[master_df["customer_id"] == "IK152942", "customer_name"] = "XYZ"
print(master_df[master_df["customer_id"] == "IK152942"]["customer_name"])
出力
0 平田 裕次郎
Name: customer_name, dtype: object
0 平田 裕次郎
Name: customer_name, dtype: object
0 XYZ
Name: customer_name, dtype: object