ブールインデックスを使用してDataFrameをスライスしてコピーを取得し、元のDataFrameとは無関係にそのコピーに対して処理を行います。
この answer から判断して、ブール配列を使用して.loc
で選択すると、コピーが返されますが、コピー、SettingWithCopyWarning
が邪魔になります。これは正しい方法でしょうか?
import numpy as np
import pandas as pd
d1 = pd.DataFrame(np.random.randn(10, 5), columns=['a', 'b', 'c', 'd', 'e'])
# create a new dataframe from the sliced copy
d2 = pd.DataFrame(d1.loc[d1.a > 1, :])
# do stuff with d2, keep d1 unchanged
copy
とともに boolean indexing
が必要です。新しいDataFrame
コンストラクタは必要ありません。
d2 = d1[d1.a > 1].copy()
警告の説明:
後でd2
の値を変更すると、変更が元のデータ(d1
)に反映されず、Pandasが警告を発します。