pandas.DataFrame.copy
- DataFrame.copy(deep=True)[source]
-
Создаёт копию индексов и данных этого объекта.
При значении
deep=True(по умолчанию), создаётся новый объект с копией данных и индексов исходного объекта. Изменения данных или индексов копии не повлияют на исходный объект (см. примечания ниже).При значении
deep=False, создаётся новый объект без копирования данных или индекса исходного объекта (копируются только ссылки на данные и индекс). Любые изменения данных исходного объекта будут отражены в поверхностной копии (и наоборот).- Параметры
-
- deep:bool, по умолчанию True
-
Создать глубокую копию, включая копию данных и индексов. При значении
deep=Falseни индексы, ни данные не копируются.
- Возвращает
-
- copy:Series или DataFrame
-
Тип объекта соответствует типу вызывающего объекта.
Примечания
При значении
deep=True, данные копируются, но фактические объекты Python не копируются рекурсивно, копируется только ссылка на объект. Это отличается от copy.deepcopy в стандартной библиотеке, которая рекурсивно копирует данные объекта (см. примеры ниже).Хотя
Indexобъекты копируются при значенииdeep=True, базовая numpy-матрица не копируется для повышения производительности. ПосколькуIndexявляется неизменяемым, базовые данные могут безопасно разделяться, и копия не нужна.Поскольку pandas не является потокобезопасным, см. примечания при копировании в среде многопоточности.
Примеры
>>> s = pd.Series([1, 2], index=["a", "b"]) >>> s a 1 b 2 dtype: int64
>>> s_copy = s.copy() >>> s_copy a 1 b 2 dtype: int64
Поверхностная копия против копии по умолчанию (глубокой):
>>> s = pd.Series([1, 2], index=["a", "b"]) >>> deep = s.copy() >>> shallow = s.copy(deep=False)
Поверхностная копия использует данные и индекс с оригиналом.
>>> s is shallow False >>> s.values is shallow.values and s.index is shallow.index True
Глубокая копия имеет собственную копию данных и индекса.
>>> s is deep False >>> s.values is deep.values or s.index is deep.index False
Обновления данных, общих для поверхностной копии и оригинала, отражаются в обоих; глубокая копия остаётся неизменной.
>>> s[0] = 3 >>> shallow[1] = 4 >>> s a 3 b 4 dtype: int64 >>> shallow a 3 b 4 dtype: int64 >>> deep a 1 b 2 dtype: int64
Обратите внимание, что при копировании объекта, содержащего объекты Python, глубокая копия скопирует данные, но не будет делать это рекурсивно. Обновление вложенного объекта данных будет отражено в глубокой копии.
>>> s = pd.Series([[1, 2], [3, 4]]) >>> deep = s.copy() >>> s[0][0] = 10 >>> s 0 [10, 2] 1 [3, 4] dtype: object >>> deep 0 [10, 2] 1 [3, 4] dtype: object
© 2008–2022, AQR Capital Management, LLC, Lambda Foundry, Inc. and PyData Development Team
Licensed under the 3-clause BSD License.
https://pandas.pydata.org/pandas-docs/version/1.5.0/reference/api/pandas.DataFrame.copy.html