Метод copy
Метод copy применяется к DataFrame и возвращает его независимую копию. По умолчанию копия создается с глубоким копированием данных, что означает полную независимость оригинальной таблицы и ее копии. Метод принимает один необязательный параметр deep, который управляет глубиной копирования. Если deep=True, создается полноценная копия данных. Если deep=False, создается поверхностная копия, которая разделяет данные с оригиналом.
Синтаксис
df.copy([deep])
Пример
Давайте создадим глубокую копию таблицы и изменим ее, чтобы убедиться в независимости:
import pandas as pd
df = pd.DataFrame({
'a': [1, 2, 3, 4, 5],
'b': [10, 20, 30, 40, 50]
})
df_copy = df.copy()
df_copy.loc[0, 'a'] = 100
print("Original df:")
print(df)
print("\nCopied df:")
print(df_copy)
Результат выполнения кода:
Original df:
a b
0 1 10
1 2 20
2 3 30
3 4 40
4 5 50
Copied df:
a b
0 100 10
1 2 20
2 3 30
3 4 40
4 5 50
Пример
Теперь создадим поверхностную копию с параметром deep=False:
import pandas as pd
df = pd.DataFrame({
'a': [1, 2, 3, 4, 5],
'b': [10, 20, 30, 40, 50]
})
shallow_copy = df.copy(deep=False)
shallow_copy.loc[0, 'a'] = 100
print("Original df after modifying shallow copy:")
print(df)
print("\nShallow copy:")
print(shallow_copy)
Результат выполнения кода:
Original df after modifying shallow copy:
a b
0 100 10
1 2 20
2 3 30
3 4 40
4 5 50
Shallow copy:
a b
0 100 10
1 2 20
2 3 30
3 4 40
4 5 50
Как видим, при поверхностном копировании изменения в копии отражаются на оригинале, так как данные совместно используются.
Пример
Метод copy полезен для безопасной работы с таблицей без изменения оригинала:
import pandas as pd
df = pd.DataFrame({
'a': [1, 2, 3, 4, 5],
'b': [10, 20, 30, 40, 50]
})
safe_df = df.copy()
safe_df['c'] = safe_df['a'] + safe_df['b']
print("Original df:")
print(df)
print("\nModified copy:")
print(safe_df)
Результат выполнения кода:
Original df:
a b
0 1 10
1 2 20
2 3 30
3 4 40
4 5 50
Modified copy:
a b c
0 1 10 11
1 2 20 22
2 3 30 33
3 4 40 44
4 5 50 55
Пример
Создание копии с изменением индекса:
import pandas as pd
df = pd.DataFrame({
'a': [1, 2, 3, 4, 5],
'b': [10, 20, 30, 40, 50]
}, index=['x', 'y', 'z', 'w', 'v'])
df_copy = df.copy()
df_copy.index = ['a', 'b', 'c', 'd', 'e']
print("Original df:")
print(df)
print("\nCopied df with new index:")
print(df_copy)
Результат выполнения кода:
Original df:
a b
x 1 10
y 2 20
z 3 30
w 4 40
v 5 50
Copied df with new index:
a b
a 1 10
b 2 20
c 3 30
d 4 40
e 5 50