pandas.Series.copy#
- Series.copy(глубокий=True)[источник]#
Создать копию индексов и данных этого объекта.
Когда
deep=True(по умолчанию), будет создан новый объект с копией данных и индексов вызывающего объекта. Изменения данных или индексов копии не отразятся на исходном объекте (см. примечания ниже).Когда
deep=False, новый объект будет создан без копирования данных или индекса вызывающего объекта (копируются только ссылки на данные и индекс). Любые изменения данных оригинала будут отражены в поверхностной копии (и наоборот).Примечание
The
deep=Falseповедение, как описано выше, изменится в pandas 3.0. Копирование при записи будет включено по умолчанию, что означает, что «поверхностная» копия возвращается сdeep=Falseпо-прежнему избежит создания немедленной копии, но изменения данных оригинала нет больше не будет отражаться в поверхностной копии (или наоборот). Вместо этого используется механизм ленивого (отложенного) копирования, который копирует данные только при внесении изменений в оригинал или поверхностную копию.Вы уже можете получить будущее поведение и улучшения, включив copy on write
pd.options.mode.copy_on_write = True- Параметры:
- глубокийbool, по умолчанию True
Создать глубокую копию, включая копию данных и индексов. С
deep=Falseни индексы, ни данные не копируются.
- Возвращает:
- Series или DataFrame
Тип объекта соответствует вызывающему объекту.
Примечания
Когда
deep=Trueданные копируются, но фактические объекты Python не будут копироваться рекурсивно, только ссылка на объект. Это отличается от copy.deepcopy в стандартной библиотеке, которая рекурсивно копирует объектные данные (см. примеры ниже).В то время как
Indexобъекты копируются, когдаdeep=True, базовый массив numpy не копируется по соображениям производительности. ПосколькуIndexявляется неизменяемым, базовые данные можно безопасно использовать совместно, и копия не требуется.Поскольку pandas не является потокобезопасным, см. подводные камни при копировании в многопоточной среде.
Когда
copy_on_writeв конфигурации pandas установленоTrue,copy_on_writeконфигурация вступает в силу даже когдаdeep=False. Это означает, что любые изменения в скопированных данных приведут к созданию новой копии данных при записи (и наоборот). Изменения, внесенные в исходную или скопированную переменную, не отразятся в соответствующей. См. Copy_on_Write для получения дополнительной информации.Примеры
>>> 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
Обновления данных, общих для поверхностной копии и оригинала, отражаются в обоих (ПРИМЕЧАНИЕ: это больше не будет верно для pandas >= 3.0); глубокая копия остаётся неизменной.
>>> s.iloc[0] = 3 >>> shallow.iloc[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
Copy-on-Write установлен в true, поверхностная копия не изменяется при изменении исходных данных:
>>> with pd.option_context("mode.copy_on_write", True): ... s = pd.Series([1, 2], index=["a", "b"]) ... copy = s.copy(deep=False) ... s.iloc[0] = 100 ... s a 100 b 2 dtype: int64 >>> copy a 1 b 2 dtype: int64