Pandas 3.0 сломал мой пайплайн — Copy-on-Write это боль или благо?

Рейтинг: 67.2% · 18 голосов
Machine learning и deep learning: обучение и дообучение моделей, датасеты, PyTorch, TensorFlow, эксперименты, метрики, MLOps и аналитика данных.
Ответить
Аватара пользователя
jownby
Сообщения: 23
Зарегистрирован: 21 май 2026, 03:42

Pandas 3.0 сломал мой пайплайн — Copy-on-Write это боль или благо?

Сообщение jownby »

Обновился до Pandas 3.0 на рабочем проекте (ETL-пайплайн, ~15k строк кода). Наткнулся на массовые предупреждения ChainedAssignmentError, которые в 3.0 стали реальными ошибками — Copy-on-Write теперь включён по умолчанию и обратной совместимости нет. Особенно больно в местах вроде df[df['col'] > 0]['other_col'] = value — это раньше работало через раз и было известной проблемой, теперь просто падает. Кто уже прошёл эту миграцию на боевом коде — есть ли автоматические инструменты для поиска проблемных мест, или только ручной аудит?
👍2 ❤️3 🔥1 😄 🤔
✔ Лучший ответ сформирован автоматически — navspy
@jownby, Прошёл примерно такую же миграцию на датасайенс-проекте. Инструмента «найди всё автоматически» нет, но помогает такой подход: запускаешь код с pd.options.mode.copy_on_write = 'warn' на Pandas 2.2 перед апгрейдом — он выдаёт предупреждения именно там, где в 3.0 будут ошибки. Собираешь все варнинги в лог, потом последовательно правишь. У меня было около 340 предупреждений, реальных ошибок …
Перейти к ответу →
Аватара пользователя
linux_lord
Сообщения: 6
Зарегистрирован: 23 май 2026, 20:45

Re: Pandas 3.0 сломал мой пайплайн — Copy-on-Write это боль или благо?

Сообщение linux_lord »

Есть ещё нюанс с многоуровневой индексацией и GroupBy — там CoW поведение иногда неочевидное. Рекомендую после миграции прогнать тесты с включённым gc.collect() между операциями и смотреть на утечки памяти. У нас вылезла одна нетривиальная проблема именно с groupby().apply() где внутренняя функция мутировала переданный датафрейм — раньше это работало, теперь мутация не проходит наружу. Пришлось переписать на явный return.
👍2 ❤️ 🔥 😄1 🤔
Аватара пользователя
sergeyserov
Сообщения: 56
Зарегистрирован: 12 май 2026, 05:59

Re: Pandas 3.0 сломал мой пайплайн — Copy-on-Write это боль или благо?

Сообщение sergeyserov »

Полезный лайфхак для постепенной миграции на больших репозиториях: в начале каждого скрипта ставьте import warnings; warnings.filterwarnings('error', category=pd.errors.ChainedAssignmentError) — это превращает варнинги в ошибки ещё на 2.2, и CI начинает ловить проблемные места до апгрейда. Мы так мигрировали за 3 спринта без единого инцидента на проде.
👍 ❤️ 🔥 😄 🤔
Аватара пользователя
navspy
Сообщения: 60
Зарегистрирован: 12 май 2026, 02:48

Re: Pandas 3.0 сломал мой пайплайн — Copy-on-Write это боль или благо?

Сообщение navspy »

✔ Лучший ответ — сформирован автоматически
@jownby, Прошёл примерно такую же миграцию на датасайенс-проекте. Инструмента «найди всё автоматически» нет, но помогает такой подход: запускаешь код с pd.options.mode.copy_on_write = 'warn' на Pandas 2.2 перед апгрейдом — он выдаёт предупреждения именно там, где в 3.0 будут ошибки. Собираешь все варнинги в лог, потом последовательно правишь. У меня было около 340 предупреждений, реальных ошибок оказалось 87 — остальное было просто переизбыточным копированием, которое теперь исключено.
👍 ❤️ 🔥 😄 🤔
Аватара пользователя
juniorredteam
Сообщения: 66
Зарегистрирован: 11 май 2026, 07:16

Re: Pandas 3.0 сломал мой пайплайн — Copy-on-Write это боль или благо?

Сообщение juniorredteam »

@jownby, Конкретный паттерн замены: вместо df[mask]['col'] = val пишите df.loc[mask, 'col'] = val. Это работало правильно и раньше, просто раньше первый вариант иногда тоже работал случайно. Если нужно именно модифицировать копию — явно делайте df2 = df[mask].copy(), потом df2['col'] = val. Читаемость кода от этого только выигрывает — сразу видно, где создаётся новый объект.
👍 ❤️ 🔥1 😄 🤔
Аватара пользователя
seniorsamurai
Сообщения: 44
Зарегистрирован: 15 май 2026, 19:29

Re: Pandas 3.0 сломал мой пайплайн — Copy-on-Write это боль или благо?

Сообщение seniorsamurai »

@jownby, CoW — это на самом деле благо для продакшена, просто миграционная боль неизбежна. После перехода у нас pipeline стал потреблять на 18% меньше RAM на тех же данных — pandas перестал делать невидимые копии датафреймов в каждой операции. На датасетах по 10-20 GB это ощутимо. Но да, неделю чинили старый код.
👍 ❤️1 🔥 😄1 🤔
Ответить
Поделиться темой: ✈ Telegram VK

Вернуться в «Машинное обучение и Data Science»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость