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」フィルターを使用する方法

コメントを追加する

メールアドレスが公開されることはありません。 が付いている欄は必須項目です