Как (и зачем) сделать копию pandas dataframe


Каждый раз, когда вы создаете подмножество DataFrame pandas, а затем изменяете это подмножество, исходный DataFrame также будет изменен.

По этой причине всегда полезно использовать .copy() при создании подмножества, чтобы изменения, вносимые в подмножество, не вносились также в исходный DataFrame.

В следующих примерах показано, как (и почему) сделать копию DataFrame pandas при подмножестве.

Пример 1. Подмножество DataFrame без копии

Предположим, у нас есть следующий DataFrame pandas:

 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:

 #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

Обратите внимание, что первое значение столбца команды было изменено с «A» на «X» как в подмножестве DataFrame , так и в исходном DataFrame.

Это связано с тем, что мы не сделали копию исходного DataFrame.

Пример 2. Подмножество DataFrame с помощью Copy

Давайте снова предположим, что у нас есть следующий DataFrame pandas:

 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, но на этот раз мы используем .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

Обратите внимание, что первое значение столбца команды было изменено с «A» на «X» только в подмножестве DataFrame.

Исходный DataFrame остается нетронутым, поскольку мы использовали .copy() , чтобы сделать его копию при создании подмножества.

Дополнительные ресурсы

В следующих руководствах объясняется, как выполнять другие распространенные операции в pandas:

Как удалить строки в Pandas DataFrame в зависимости от условия
Как фильтровать DataFrame Pandas по нескольким условиям
Как использовать фильтр «НЕ В» в Pandas DataFrame

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *