Что нового в 2.3.0 (4 июня 2025)#
Это изменения в pandas 2.3.0. См. Примечания к выпуску для полного списка изменений, включая другие версии pandas.
Предстоящие изменения в pandas 3.0#
pandas 3.0 принесет два более значительных изменения в поведение pandas по умолчанию.
Выделенный тип данных для строк по умолчанию#
Исторически pandas представлял строковые столбцы с помощью NumPy object тип данных.
Это представление имеет множество проблем: оно не специфично для строк (любой
объект Python может быть сохранен в object-массив типа dtype, не только строки) и
это часто не очень эффективно (как с точки зрения производительности, так и использования памяти).
Начиная с предстоящего выпуска pandas 3.0, выделенный строковый тип данных будет
включён по умолчанию (с поддержкой PyArrow под капотом, если установлен, в противном случае
возвращаясь к NumPy). Это означает, что pandas начнёт определять столбцы,
содержащие строковые данные, как новый str тип данных при создании объектов pandas,
например, в конструкторах или функциях ввода-вывода.
Старое поведение:
>>> ser = pd.Series(["a", "b"])
0 a
1 b
dtype: object
Новое поведение:
>>> ser = pd.Series(["a", "b"])
0 a
1 b
dtype: str
Строковый тип данных, используемый в этих сценариях, в основном будет вести себя как NumPy object, включая семантику пропущенных значений и общие операции с этими столбцами.
Однако введение нового типа данных по умолчанию также будет иметь некоторые критические
последствия для вашего кода (например, при проверке на .dtype будучи
типом object). Чтобы позволить тестирование до выхода pandas 3.0, эта
будущая логика вывода типов данных может быть включена в pandas 2.3 с помощью:
pd.options.future.infer_string = True
См. Руководство по миграции для нового типа данных строк (pandas 3.0) для получения дополнительных сведений об изменениях в поведении и о том, как адаптировать ваш код к новым значениям по умолчанию.
Копирование при записи#
В настоящее время опциональный режим Copy-on-Write будет включен по умолчанию в pandas 3.0. Не будет возможности сохранить устаревшее поведение.
В итоге, новое поведение "копирование при записи" приведет к изменениям в поведении как pandas работает с копиями и представлениями.
Результат любой операция индексирования (выбор подмножества DataFrame или Series любым способом, т.е. включая доступ к столбцу DataFrame как к Series) или любой метод, возвращающий новый DataFrame или Series, всегда ведёт себя как это была копия с точки зрения пользовательского API.
Как следствие, если вы хотите изменить объект (DataFrame или Series), единственный способ сделать это — напрямую изменить сам объект.
Поскольку каждый шаг индексирования теперь ведет себя как копия, это также означает, что
«цепное присваивание» (обновление DataFrame с несколькими шагами setitem) перестанет
работать. Поскольку это теперь последовательно никогда не работает,
SettingWithCopyWarning будет удалено.
Новая семантика поведения подробно объясняется в руководство пользователя о Copy-on-Write.
Новое поведение можно включить начиная с pandas 2.0 с помощью следующей опции:
pd.options.mode.copy_on_write = True
Некоторые изменения в поведении допускают чёткое устаревание, как изменения в цепочке присваиваний. Другие изменения более тонкие, поэтому предупреждения скрыты за опцией, которую можно включить начиная с pandas 2.2:
pd.options.mode.copy_on_write = "warn"
Этот режим будет предупреждать во многих различных сценариях, которые на самом деле не имеют отношения к большинству запросов. Мы рекомендуем изучить этот режим, но не обязательно избавляться от всех этих предупреждений. руководство по миграции подробнее объясняет процесс обновления.
Улучшения#
Другие улучшения#
Семантика для
copyключевое слово в__array__методы (т.е. вызываются при использованииnp.array()илиnp.asarray()на объектах pandas) был обновлен для корректной работы с NumPy >= 2 (GH 57739)Series.str.decode()результат теперь имеетStringDtypeкогдаfuture.infer_stringравно True (GH 60709)to_hdf()иto_hdf()теперь работают в обе стороны сStringDtype(GH 60663)Улучшено
reprofNumpyExtensionArrayдля учёта NEP51 (GH 61085)The
Series.str.decode()получил аргументdtypeдля управления типом данных результата (GH 60940)The
cumsum(),cummin(), иcummax()редукции теперь реализованы дляStringDtypeстолбцы (GH 60633)The
sum()сокращение теперь реализовано дляStringDtypeстолбцы (GH 59853)
Устаревшие функции#
Устарело разрешение не-
boolзначения дляnaвstr.contains(),str.startswith(), иstr.endswith()для типов данных, которые еще не запрещают это (GH 59615)Устарел
"pyarrow_numpy"опция хранения дляStringDtype(GH 60152)Устаревание установки аргумента
include_groupstoTrueвDataFrameGroupBy.apply()был повышен изDeprecationWarningtoFutureWarning; толькоFalseбудет разрешено (GH 7155)
Исправления ошибок#
Числовой#
Ошибка в
Series.mode()иDataFrame.mode()сdropna=Falseгде не все типы данных сортировались бы при наличииNAзначения (GH 60702)Ошибка в
Series.round()гдеTypeErrorвсегда вызывал бы исключение сobjectтип данных (GH 61206)
Строки#
Ошибка в
Series.__pos__()иDataFrame.__pos__()гдеExceptionне было вызвано дляStringDtypeсstorage="pyarrow"(GH 60710)Ошибка в
Series.rank()дляStringDtypeсstorage="pyarrow"который некорректно возвращал целочисленные результаты сmethod="average"и вызывал ошибку, если это привело бы к усечению результатов (GH 59768)Ошибка в
Series.replace()сStringDtypeпри замене нестроковым значением не выполнялось повышение типа доobjectтип данных (GH 60282)Ошибка в
Series.str.center()сStringDtypeсstorage="pyarrow"не соответствует поведению python в крайних случаях с нечетным количеством заполняющих символов (GH 54792)Ошибка в
Series.str.replace()когдаn < 0дляStringDtypeсstorage="pyarrow"(GH 59628)Ошибка в
Series.str.slice()с отрицательнымstepсArrowDtypeиStringDtypeсstorage="pyarrow"даёт некорректные результаты (GH 59710)
Индексирование#
Ошибка в
Index.get_indexer()циклическое преобразование через строковый тип данных, когдаinfer_stringвключен (GH 55834)
I/O#
Ошибка в
DataFrame.to_excel()который хранил десятичные числа как строки вместо чисел (GH 49598)
Другие#
Исправлено использование
inspectкогда опциональные зависимостиpyarrowилиjinja2не установлены (GH 60196)
Участники#
Всего 24 человека внесли патчи в этот выпуск. Люди с «+» рядом с именами внесли патч впервые.
ChiLin Chiu +
Ирв Ластиг
Isuru Fernando +
Jake Thomas Trevallion +
Joris Van den Bossche
Kevin Amparado +
LOCHAN PAUDEL +
Lumberbot (он же Джек)
Marc Mueller +
Marco Edward Gorelli
Мэтью Рёшке
Команда разработчиков Pandas
Patrick Hoefler
Richard Shadrach
SALCAN +
Себастьян Берг
Simon Hawkins
Thomas Li
Уилл Айд
William Andrea
William Ayd
dependabot[bot]
jbrockmendel
tasfia8 +