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


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

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

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

Пример 1: подмножество фрейма данных без копирования

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

import pandas as pd

#create DataFrame
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 A 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 H 28 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
0 X 18 5
1 B 22 7
2 C 19 7
3 D 14 9

#view original DataFrame
print(df)

 team points assists
0 X 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 H 28 4

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

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

Пример 2: подмножество DataFrame с копированием

Еще раз предположим, что у нас есть следующий кадр данных pandas:

import pandas as pd

#create DataFrame
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 A 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 H 28 4

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

#define subsetted DataFrame
df_subset = df[0:4]. copy ()

Теперь предположим, что мы изменили первое значение в столбце team подмножества DataFrame:

#change first value in team column
df_subset. team [0] = 'X '

#view subsetted DataFrame
print(df_subset)

 team points assists
0 X 18 5
1 B 22 7
2 C 19 7
3 D 14 9

#view original DataFrame
print(df)

 team points assists
0 A 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 H 28 4

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

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

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

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

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

Замечательно! Вы успешно подписались.
Добро пожаловать обратно! Вы успешно вошли
Вы успешно подписались на кодкамп.
Срок действия вашей ссылки истек.
Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.
Успех! Ваша платежная информация обновлена.
Ваша платежная информация не была обновлена.