Всякий раз, когда вы создаете подмножество фрейма данных 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