web-dev-qa-db-ja.com

Pandas DataFrameを新しいDataFrameにスライスする

ブールインデックスを使用して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
10
Pietro Marchesi

copy とともに boolean indexing が必要です。新しいDataFrameコンストラクタは必要ありません。

d2 = d1[d1.a > 1].copy()

警告の説明:

後でd2の値を変更すると、変更が元のデータ(d1)に反映されず、Pandasが警告を発します。

11
jezrael