tgoop.com/factory_dataframes/21
Last Update:
Её идея:
Когда ты делаешь какую-то выборку (slice) из большого DataFrame, Pandas сначала создаёт не полную копию данных, а специальное представление (view), которое ссылается на исходные данные.
Но как только ты пытаешься изменить этот кусок, Pandas тут же создаёт копию автоматически, чтобы твои изменения не задели исходную таблицу.
Таким образом, Copy-on-Write позволяет:
- Избавиться от предупреждений SettingWithCopy.
- Избежать неожиданных ошибок, связанных с изменением данных.
- Экономить память и ускорять работу (копии данных создаются только тогда, когда реально нужно что-то поменять).
Пример работы с Copy-on-Write
Допустим, у нас есть DataFrame:
import pandas as pd
pd.options.mode.copy_on_write = True # включаем CoW явно (в Pandas 3.0 это по умолчанию)
df = pd.DataFrame({"A": [1, 2, 3]})
df_slice = df[df["A"] > 1] # это сейчас просто view (представление)
Если сейчас изменить df_slice:
df_slice.loc[:, "A"] = 999
то Pandas создаст копию автоматически. Исходный df не изменится, а предупреждения тоже не будет.
Что нужно запомнить?
- SettingWithCopy — предупреждение, что Pandas не уверен, копия у тебя или ссылка на оригинал.
- Copy-on-Write — автоматическое создание копий при изменении, которое решает эту проблему полностью.
В Pandas 3.0 Copy-on-Write становится стандартным поведением, избавляя тебя от головной боли с SettingWithCopy
