Функция Pandas copy() используется для создания копии объекта Pandas. Переменные также используются для создания копии объекта. Тем не менее, переменные — это просто указатели на объект, и любое изменение новых данных также изменит предыдущие данные.
Что такое функция DataFrame.copy() в Pandas?
Чтобы скопировать DataFrame в Pandas, используйте метод copy(). Метод DataFrame.copy() создает копию предоставленных индексов и данных объекта. Метод copy() принимает один параметр, называемый deep, и возвращает серию или фрейм данных, соответствующий вызывающему объекту.
Синтаксис
|
1 |
DataFrame.copy(deep=True) |
Параметры
deep: bool, по умолчанию True.
- Когда deep=True(по умолчанию), новый объект будет создан с копией данных и индексов вызывающего объекта. Изменения данных или индексов копии не будут отражены в исходном объекте.
- Когда deep=False, новый объект будет сгенерирован без копирования данных или индекса вызывающего объекта(копируются только ссылки на данные и индекс). Любые изменения данных оригинала будут отражены в мелкой копии(и наоборот).
Возвращаемое значение
Метод copy() возвращает серию или фрейм данных.

Пример
Напишите следующий код в файле app.py.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
# app.py import pandas as pd data = {'Show': ['Stranger Things', 'The X-Files', 'Mandalorian', 'The Boys'], 'Streaming': ['Netflix', 'Fx', 'Disney Plus', 'Amazon Prime'], 'Season': [3, 12, 1, 2], 'Main Actor': ['Millie', 'Gillian', 'Pedro', 'Karl Urban']} df = pd.DataFrame.from_dict(data) print('Original DataFrame') print(df) print('----------------------------------------------------') dfCopy = df.copy() print('Copied DataFrame') print(dfCopy) |
Вывод:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Original DataFrame Show Streaming Season Main Actor 0 Stranger Things Netflix 3 Millie 1 The X-Files Fx 12 Gillian 2 Mandalorian Disney Plus 1 Pedro 3 The Boys Amazon Prime 2 Karl Urban ---------------------------------------------------- Copied DataFrame Show Streaming Season Main Actor 0 Stranger Things Netflix 3 Millie 1 The X-Files Fx 12 Gillian 2 Mandalorian Disney Plus 1 Pedro 3 The Boys Amazon Prime 2 Karl Urban |
В этом примере мы определили DataFrame, а затем использовали метод df.copy() для копирования DataFrame и печати исходного и скопированного DataFrame. Мы не передавали никаких параметров методу copy().
Поверхностная и глубокая копия Pandas DataFrame
- Чтобы создать глубокую копию Pandas DataFrame, используйте метод df.copy() или df.copy(deep=True).
- Чтобы создать поверхностную копию Pandas DataFrame, используйте метод df.copy(deep=False).
Функция Pandas DataFrame copy() делает копию индексов и данных этого объекта. Когда deep=True(по умолчанию), новый объект будет создан с копией данных и индексов вызывающего объекта. Изменения данных или индексов копии не будут отражены в исходном объекте.
Когда deep=False, новый объект будет создан без копирования данных или индекса вызывающего объекта(копируются только ссылки на данные и индекс). Любые изменения данных оригинала будут отражены в мелкой копии.
См. следующий код.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
# app.py import pandas as pd data = {'Show': ['Stranger Things', 'The X-Files', 'Mandalorian', 'The Boys'], 'Streaming': ['Netflix', 'Fx', 'Disney Plus', 'Amazon Prime'], 'Season': [3, 12, 1, 2], 'Main Actor': ['Millie', 'Gillian', 'Padro', 'Karl Urban']} df = pd.DataFrame.from_dict(data) deepCopy = df.copy() shallowCopy = df.copy(deep=False) print('The df is equal to shallowCopy: ', df is shallowCopy) print('The df is equal to deepCopy: ', df is deepCopy) print('----------------------------------------------------') print('The shallowCopy.values is equal to df.values: ', shallowCopy.values is df.values) print('The deepCopy.values is equal to df.values: ', deepCopy.values is df.values) print('----------------------------------------------------') print('The shallowCopy.index is equal to df.index: ', shallowCopy.index is df.index) print('The deepCopy.index is equal to df.index: ', deepCopy.index is df.index) |
Вывод:
|
1 2 3 4 5 6 7 8 |
The df is equal to shallowCopy: False The df is equal to deepCopy: False ---------------------------------------------------- The shallowCopy.values is equal to df.values: False The deepCopy.values is equal to df.values: False ---------------------------------------------------- The shallowCopy.index is equal to df.index: True The deepCopy.index is equal to df.index: False |
Из вывода вы можете получить следующие наблюдения.
- Неглубокая копия разделяет данные и индекс с оригиналом.
- Глубокая копия не использует данные и индекс совместно с исходным объектом. Объект глубокой копии имеет свою копию данных и индекс.
- При копировании объекта, содержащего объекты Python, глубокая копия копирует данные, но не рекурсивно. Обновление вложенного объекта данных будет отражено в глубокой копии.
- Когда deep=True, данные копируются, но фактические объекты Python не будут рекурсивно копироваться, а только ссылка на этот объект.
- В то время как объекты индекса копируются, когда deep=True, базовый массив numpy не копируется из соображений производительности. Поскольку индекс неизменяем, базовые данные можно безопасно использовать совместно, и копия не требуется.
