Что нового в 0.23.1 (12 июня 2018)#

Это минорный релиз с исправлениями ошибок в серии 0.23.x и включает некоторые небольшие исправления регрессий и исправления ошибок. Мы рекомендуем всем пользователям обновиться до этой версии.

Предупреждение

Начиная с 1 января 2019 года, релизы функций pandas будут поддерживать только Python 3. См. Удаление Python 2.7 подробнее.

Исправленные регрессии#

Сравнение 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).

Улучшения производительности#

  • Улучшена производительность CategoricalIndex.is_monotonic_increasing(), CategoricalIndex.is_monotonic_decreasing() и CategoricalIndex.is_monotonic() (GH 21025)

  • Улучшена производительность CategoricalIndex.is_unique() (GH 21107)

Исправления ошибок#

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)

Другие

  • Автодополнение по табу на Index в IPython больше не выводит предупреждения об устаревании (GH 21125)

  • Ошибка, препятствующая использованию pandas в Windows без установленного распространяемого пакета C++ (GH 21106)

Участники#

Всего 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 +