Pandas dataframe のコピーを作成する方法 (およびその理由)
pandas DataFrame のサブセットを作成してそのサブセットを変更するたびに、元の DataFrame も変更されます。
このため、サブセットに加えた変更が元の DataFrame にも加えられないように、サブセット化するときは常に.copy()を使用することをお勧めします。
次の例は、サブセット化するときに pandas DataFrame のコピーを作成する方法 (およびその理由) を示しています。
例 1: コピーを使用せずに DataFrame をサブセット化する
次のパンダ データフレームがあるとします。
import pandas as pd #createDataFrame df = pd. DataFrame ({' team ': ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'], ' points ': [18, 22, 19, 14, 14, 11, 20, 28], ' assists ': [5, 7, 7, 9, 12, 9, 9, 4]}) #view DataFrame print (df) team points assists 0 to 18 5 1 B 22 7 2 C 19 7 3 D 14 9 4 E 14 12 5 F 11 9 6 G 20 9 7:28 a.m. 4
ここで、元の DataFrame の最初の 4 行のみを含むサブセットを作成するとします。
#define subsetted DataFrame df_subset = df[0:4] #view subsetted DataFrame print (df_subset) team points assists rebounds 0 A 18 5 11 1 B 22 7 8 2 C 19 7 10 3 D 14 9 6
サブセット内の値のいずれかを変更すると、元の DataFrame の値も変更されます。
#change first value in team column
df_subset. team [0] = ' X '
#view subsetted DataFrame
print (df_subset)
team points assists
0X18 5
1 B 22 7
2 C 19 7
3 D 14 9
#view original DataFrame
print (df)
team points assists
0X18 5
1 B 22 7
2 C 19 7
3 D 14 9
4 E 14 12
5 F 11 9
6 G 20 9
7:28 a.m. 4
サブセット DataFrameと元の DataFrame の両方で、チーム列の最初の値が「A」から「X」に変更されていることに注意してください。
これは、元の DataFrame のコピーを作成していないためです。
例 2: コピーを使用して DataFrame をサブセット化する
もう一度、次の pandas DataFrame があると仮定してみましょう。
import pandas as pd #createDataFrame df = pd. DataFrame ({' team ': ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'], ' points ': [18, 22, 19, 14, 14, 11, 20, 28], ' assists ': [5, 7, 7, 9, 12, 9, 9, 4]}) #view DataFrame print (df) team points assists 0 to 18 5 1 B 22 7 2 C 19 7 3 D 14 9 4 E 14 12 5 F 11 9 6 G 20 9 7:28 a.m. 4
もう一度、元の DataFrame の最初の 4 行のみを含むサブセットを作成すると仮定します。ただし、今回は.copy()を使用して元の DataFrame のコピーを作成します。
#define subsetted DataFrame df_subset = df[0:4]. copy ()
ここで、DataFrame サブセットのチーム列の最初の値を変更するとします。
#change first value in team column
df_subset. team [0] = ' X '
#view subsetted DataFrame
print (df_subset)
team points assists
0X18 5
1 B 22 7
2 C 19 7
3 D 14 9
#view original DataFrame
print (df)
team points assists
0 to 18 5
1 B 22 7
2 C 19 7
3 D 14 9
4 E 14 12
5 F 11 9
6 G 20 9
7:28 a.m. 4
DataFrame サブセットのみでチーム列の最初の値が「A」から「X」に変更されたことに注意してください。
サブセットの作成時に.copy()を使用してコピーを作成したため、元の DataFrame はそのまま残ります。
追加リソース
次のチュートリアルでは、パンダで他の一般的な操作を実行する方法を説明します。
条件に基づいて Pandas DataFrame の行を削除する方法
複数の条件で Pandas DataFrame をフィルタリングする方法
Pandas DataFrame で「NOT IN」フィルターを使用する方法