DataFrame.copy() / Series.copy()

Метод copy() создаёт копию объекта, чтобы изменения не влияли на оригинал. По умолчанию выполняется глубокая копия (deep copy).

Сигнатура

DataFrame.copy(deep=True)
Series.copy(deep=True)

Параметры

  • deep — если True (default), копируются также данные и индексы; если False, копируется только обёртка.

Возвращаемое значение

Новый объект того же типа.

Примеры

Пример 1. Глубокая копия

import pandas as pd

df = pd.DataFrame({"a": [1, 2, 3]})
df2 = df.copy()
df2.loc[0, "a"] = 999
print(df)
   a
0  1
1  2
2  3

Пример 2. Без copy — view может изменить оригинал

import pandas as pd

df = pd.DataFrame({"a": [1, 2, 3]})
df_no_copy = df  # это просто ссылка
df_no_copy.loc[0, "a"] = 999
print(df)
     a
0  999
1    2
2    3

Пример 3. Поверхностная копия

import pandas as pd

df = pd.DataFrame({"a": [1, 2, 3]})
df_shallow = df.copy(deep=False)
print(df_shallow.equals(df))
True

Пример 4. Series

import pandas as pd

s = pd.Series([10, 20, 30])
s_copy = s.copy()
s_copy[0] = 0
print(s.tolist(), s_copy.tolist())
[10, 20, 30] [0, 20, 30]

Пример 5. Защита исходных данных при пайплайне

Не теряем оригинальные показания при чистке выбросов:

import pandas as pd

raw = pd.DataFrame({"t": [22.0, 99.0, 22.5]})
cleaned = raw.copy()
cleaned.loc[cleaned["t"] > 50, "t"] = pd.NA
print(raw["t"].tolist(), cleaned["t"].tolist())
[22.0, 99.0, 22.5] [22.0, <NA>, 22.5]

См. также

Примечание

Лицензия и источники

Техническое описание функции адаптировано из официальной документации Pandas (https://pandas.pydata.org/docs/), BSD-3-Clause License. Примеры и пояснения — © AlashEd Wiki.