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.