Что нового в 0.23.1 (12 июня 2018)#
Это минорный релиз с исправлениями ошибок в серии 0.23.x и включает некоторые небольшие исправления регрессий и исправления ошибок. Мы рекомендуем всем пользователям обновиться до этой версии.
Предупреждение
Начиная с 1 января 2019 года, релизы функций pandas будут поддерживать только Python 3. См. Удаление Python 2.7 подробнее.
Что нового в v0.23.1
Исправленные регрессии#
Сравнение Series с datetime.date
Мы отменили изменение версии 0.23.0 для сравнения Series содержащий даты и время и datetime.date объект (GH 21152).
В pandas 0.22 и ранее сравнение Series, содержащего даты и время, и datetime.date объекты привели бы к приведению datetime.date в дату и время перед сравнением.
Это было несовместимо с Python, NumPy и DatetimeIndex, которые никогда не рассматривают datetime и datetime.date равны.
В версии 0.23.0 мы унифицировали операции между DatetimeIndex и Series, и в процессе изменили сравнения между Series дат и datetime.date без предупреждения.
Мы временно восстановили поведение версии 0.22.0, поэтому даты и время могут снова сравниваться как равные, но восстановим поведение версии 0.23.0 в будущем релизе.
В итоге, вот поведение в версиях 0.22.0, 0.23.0, 0.23.1:
# 0.22.0... Silently coerce the datetime.date
>>> import datetime
>>> pd.Series(pd.date_range('2017', periods=2)) == datetime.date(2017, 1, 1)
0 True
1 False
dtype: bool
# 0.23.0... Do not coerce the datetime.date
>>> pd.Series(pd.date_range('2017', periods=2)) == datetime.date(2017, 1, 1)
0 False
1 False
dtype: bool
# 0.23.1... Coerce the datetime.date with a warning
>>> pd.Series(pd.date_range('2017', periods=2)) == datetime.date(2017, 1, 1)
/bin/python:1: FutureWarning: Comparing Series of datetimes with 'datetime.date'. Currently, the
'datetime.date' is coerced to a datetime. In the future pandas will
not coerce, and the values not compare equal to the 'datetime.date'.
To retain the current behavior, convert the 'datetime.date' to a
datetime with 'pd.Timestamp'.
#!/bin/python3
0 True
1 False
dtype: bool
Кроме того, операции сравнения по порядку вызовут TypeError в будущем.
Другие исправления
Отменена возможность
to_sql()для выполнения многозначных вставок, так как это вызывало регрессию в некоторых случаях (GH 21103). В будущем это станет настраиваемым.Исправлена регрессия в
DatetimeIndex.dateиDatetimeIndex.timeатрибуты в случае данных с учетом часового пояса:DatetimeIndex.timeвозвращалось время с часовым поясом вместо времени без часового пояса (GH 21267) иDatetimeIndex.dateвозвращена некорректная дата, когда входная дата имеет часовой пояс, отличный от UTC (GH 21230).Исправлена регрессия в
pandas.io.json.json_normalize()при вызове сNoneзначения во вложенных уровнях в JSON, и не удалять ключи со значениемNone(GH 21158, GH 21356).Ошибка в
to_csv()вызывает ошибку кодировки при указании сжатия и кодировки (GH 21241, GH 21118)Ошибка, препятствующая импорту pandas с оптимизацией -OO (GH 21071)
Ошибка в
Categorical.fillna()некорректно вызывалTypeErrorкогдаvalueотдельные категории являются итерируемыми иvalueявляется итерируемым (GH 21097, GH 19788)Исправлена регрессия в конструкторах, приводящая значения NA, такие как
Noneв строки при передачеdtype=str(GH 21083)Регрессия в
pivot_table()где упорядоченныйCategoricalс отсутствующими значениями для сводной таблицыindexдаст невыровненный результат (GH 21133)Исправлена регрессия при слиянии по булевому индексу/столбцам (GH 21119).
Улучшения производительности#
Исправления ошибок#
Groupby/resample/rolling
Ошибка в
DataFrame.agg()при применении нескольких агрегирующих функций кDataFrameс дублирующимися именами столбцов вызывало переполнение стека (GH 21063)Ошибка в
GroupBy.ffill()иGroupBy.bfill()где заполнение внутри группировки не всегда применялось должным образом из-за использования реализацией нестабильной сортировки (GH 21207)Ошибка в
GroupBy.rank()где результаты не масштабировались до 100% при указанииmethod='dense'иpct=TrueОшибка в
pandas.DataFrame.rolling()иpandas.Series.rolling()которая некорректно принимала размер окна 0 вместо вызова ошибки (GH 21286)
Специфичные для типа данных
Ошибка в
Series.str.replace()где метод выбрасываетTypeErrorна Python 3.5.2 (GH 21078)Ошибка в
Timedeltaгде передача float с единицей измерения преждевременно округляла точность float (GH 14156)Ошибка в
pandas.testing.assert_index_equal()который вызвалAssertionErrorнекорректно, при сравнении двухCategoricalIndexобъекты с параметромcheck_categorical=False(GH 19776)
Разреженный
Ошибка в
SparseArray.shapeкоторый ранее возвращал только формуSparseArray.sp_values(GH 21126)
Индексирование
Ошибка в
Series.reset_index()где соответствующая ошибка не вызывалась с недопустимым именем уровня (GH 20925)Ошибка в
interval_range()когдаstart/periodsилиend/periodsуказаны с плавающей точкойstartилиend(GH 21161)Ошибка в
MultiIndex.set_names()где ошибка возникает дляMultiIndexсnlevels == 1(GH 21149)Ошибка в
IntervalIndexконструкторы, где созданиеIntervalIndexиз категориальных данных не полностью поддерживалось (GH 21243, GH 21253)Ошибка в
MultiIndex.sort_index()что не гарантировало правильной сортировки сlevel=1; это также вызывало смещение данных в частностиDataFrame.stack()операции (GH 20994, GH 20945, GH 21052)
Построение графиков
Новые ключевые слова (sharex, sharey) для включения/выключения совместного использования осей x/y подграфиками, сгенерированными с помощью pandas.DataFrame().groupby().boxplot() (GH 20968)
I/O
Ошибка в методах ввода-вывода при указании
compression='zip'который создавал несжатые zip-архивы (GH 17778, GH 21144)Ошибка в
DataFrame.to_stata()что препятствовало экспорту DataFrame в буферы и большинство объектов, подобных файлам (GH 21041)Ошибка в
read_stata()иStataReaderкоторый некорректно декодировал строки utf-8 в Python 3 из файлов Stata 14 (версия dta 118) (GH 21244)Ошибка в IO JSON
read_json()чтение пустой JSON-схемы сorient='table'обратно кDataFrameвызвал ошибку (GH 21287)
Изменение формы
Ошибка в
concat()где ошибка была вызвана при объединенииSeriesс именами скаляра numpy и кортежа (GH 21015)Ошибка в
concat()предупреждающее сообщение, дающее неправильные указания для будущего поведения (GH 21101)
Другие
Участники#
Всего 30 человек внесли патчи в этот релиз. Люди с «+» рядом с их именами внесли патч впервые.
Adam J. Stewart
Adam Kim +
Aly Sivji
Chalmer Lowe +
Damini Satya +
Dr. Irv
Gabe Fernando +
Giftlin Rajaiah
Jeff Reback
Jeremy Schendel +
Joris Van den Bossche
Kalyan Gokhale +
Кевин Шеппард
Мэтью Рёшке
Max Kanter +
Ming Li
Pyry Kovanen +
Стефано Чианчиулли
Tom Augspurger
Uddeshya Singh +
Wenhuan
William Ayd
chris-b1
gfyoung
h-vetinari
nprad +
ssikdar1 +
tmnhat2001
topper-123
zertrin +