Версия 0.21.1 (12 декабря 2017)#

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

Основные моменты включают:

  • Временно восстановить функциональность построения графиков matplotlib для дат и времени. Это должно решить проблемы для пользователей, которые неявно полагались на pandas для построения графиков дат и времени с matplotlib. См. здесь.

  • Улучшения функций ввода-вывода Parquet, представленных в версии 0.21.0. См. здесь.

Восстановить регистрацию конвертера даты и времени Matplotlib#

pandas реализует некоторые конвертеры matplotlib для красивого форматирования меток осей на графиках с datetime или Period значения. До pandas 0.21.0 они неявно регистрировались в matplotlib как побочный эффект import pandas.

В pandas 0.21.0 мы требовали от пользователей явной регистрации преобразователя. Это вызвало проблемы у некоторых пользователей, которые полагались на наличие этих преобразователей для обычных matplotlib.pyplot методы построения графиков, поэтому мы временно отменяем это изменение; pandas 0.21.1 снова регистрирует конвертеры при импорте, как и до версии 0.21.0.

Мы добавили новую опцию для управления конвертерами: pd.options.plotting.matplotlib.register_converters. По умолчанию они зарегистрированы. Переключение этого на False удаляет форматировщики pandas и восстанавливает любые преобразователи, которые мы перезаписали при их регистрации (GH 18301).

Мы работаем с разработчиками matplotlib, чтобы сделать это проще. Мы пытаемся сбалансировать удобство пользователей (автоматическая регистрация конвертеров) с производительностью импорта и лучшими практиками (импорт pandas не должен иметь побочного эффекта перезаписи любых пользовательских конвертеров, которые вы уже установили). В будущем мы надеемся иметь большую часть функциональности форматирования даты и времени в matplotlib, оставив только специфичные для pandas конвертеры в pandas. Затем мы плавно откажемся от автоматической регистрации конвертеров в пользу явной регистрации пользователями, когда они этого захотят.

Новые возможности#

Улучшения функциональности ввода-вывода Parquet#

  • DataFrame.to_parquet() теперь будет записывать нестандартные индексы, когда базовый движок поддерживает это. Индексы будут сохранены при чтении обратно с помощью read_parquet() (GH 18581).

  • read_parquet() теперь позволяет указать столбцы для чтения из файла parquet (GH 18154)

  • read_parquet() теперь позволяет указывать kwargs, которые передаются соответствующему движку (GH 18216)

Другие улучшения#

Устаревшие функции#

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

  • Улучшена производительность построения графиков больших серий/dataframes (GH 18236).

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

Преобразование#

  • Ошибка в TimedeltaIndex вычитание могло некорректно переполняться, когда NaT присутствует (GH 17791)

  • Ошибка в DatetimeIndex вычитание datetimelike из DatetimeIndex могло не переполниться (GH 18020)

  • Ошибка в IntervalIndex.copy() при копировании и IntervalIndex с нестандартным closed (GH 18339)

  • Ошибка в DataFrame.to_dict() где столбцы datetime с информацией о часовом поясе не были преобразованы в требуемые массивы при использовании с orient='records', вызывая TypeError (GH 18372)

  • Ошибка в DateTimeIndex и date_range() где несовпадающие с учётом часового пояса start и end часовые пояса не вызывали ошибку, если end.tzinfo равно None (GH 18431)

  • Ошибка в Series.fillna() который вызывался при передаче длинного целого числа в Python 2 (GH 18159).

Индексирование#

  • Ошибка в логическом сравнении datetime.datetime и datetime64[ns] Series с типом данных (GH 17965)

  • Ошибка, где MultiIndex с более чем миллионом записей не вызывал AttributeError Устарело создание функций в списке функций, переданных вGH 18165)

  • Ошибка в IntervalIndex конструктору, когда передается список интервалов с нестандартным closed (GH 18334)

  • Ошибка в Index.putmask при передаче недопустимой маски (GH 18368)

  • Ошибка в маскированном присваивании timedelta64[ns] dtype Series, некорректно преобразованы в float (GH 18493)

Ввод-вывод#

  • Ошибка в StataReader не преобразуя столбцы даты/времени с отображением форматирования, исправлено (GH 17990). Ранее столбцы с форматированием отображения обычно оставались порядковыми номерами и не преобразовывались в объекты datetime.

  • Ошибка в read_csv() при чтении сжатого файла в кодировке UTF-16 (GH 18071)

  • Ошибка в read_csv() для обработки нулевых значений в столбцах индекса при указании na_filter=False (GH 5239)

  • Ошибка в read_csv() при чтении числовых полей категорий с высокой кардинальностью (GH 18186)

  • Ошибка в DataFrame.to_csv() когда таблица имела MultiIndex столбцов, и был передан список строк для header (GH 5539)

  • Ошибка в разборе целочисленных datetime-подобных столбцов с указанным форматом в read_sql (GH 17855).

  • Ошибка в DataFrame.to_msgpack() при сериализации данных numpy.bool_ тип данных (GH 18390)

  • Ошибка в read_json() не декодируется при чтении JSON с разделителями строк из S3 (GH 17200)

  • Ошибка в pandas.io.json.json_normalize() чтобы избежать изменения meta (GH 18610)

  • Ошибка в to_latex() где повторяющиеся значения MultiIndex не выводились, даже если более высокий уровень индекса отличался от предыдущей строки (GH 14484)

  • Ошибка при чтении категориальных столбцов, содержащих только NaN, в HDFStore (GH 18413)

  • Ошибка в DataFrame.to_latex() с longtable=True где латексный multicolumn всегда охватывал три столбца (GH 17959)

Построение графиков#

  • Ошибка в DataFrame.plot() и Series.plot() с DatetimeIndex где фигура, сгенерированная ими, не может быть сериализована в Python 3 (GH 18439)

GroupBy/resample/rolling#

  • Ошибка в DataFrame.resample(...).apply(...) когда есть вызываемый объект, который возвращает разные столбцы (GH 15169)

  • Ошибка в DataFrame.resample(...) когда происходит изменение времени (летнее время) и частота передискретизации составляет 12 часов или выше (GH 15549)

  • Ошибка в pd.DataFrameGroupBy.count() при подсчёте по столбцу datetimelike (GH 13393)

  • Ошибка в rolling.var где вычисление неточно с массивом нулевых значений (GH 18430)

Изменение формы#

  • Сообщение об ошибке в pd.merge_asof() для несоответствия типа данных ключа теперь включает тип данных левого и правого ключа (GH 18068)

  • Ошибка в pd.concat когда объединяются пустые и непустые DataFrame или Series (GH 18178 GH 18187)

  • Ошибка в DataFrame.filter(...) когда unicode передается как условие в Python 2 (GH 13101)

  • Ошибка при слиянии пустых DataFrame, когда np.seterr(divide='raise') установлен (GH 17776)

Числовой#

  • Ошибка в pd.Series.rolling.skew() и rolling.kurt() со всеми одинаковыми значениями имеет проблему с плавающей точкой (GH 18044)

Категориальный#

  • Ошибка в DataFrame.astype() где приведение к 'category' на пустом DataFrame вызывает ошибку сегментации (GH 18004)

  • Сообщения об ошибках в модуле тестирования были улучшены, когда элементы имеют разные CategoricalDtype (GH 18069)

  • CategoricalIndex теперь может корректно принимать pd.api.types.CategoricalDtype в качестве его типа данных (GH 18116)

  • Ошибка в Categorical.unique() возвращая только для чтения codes массив, когда все категории были NaN (GH 18051)

  • Ошибка в DataFrame.groupby(axis=1) с CategoricalIndex (GH 18432)

String#

  • Series.str.split() теперь будет распространять NaN значения по всем расширенным столбцам вместо None (GH 18450)

Участники#

Всего 46 человек внесли патчи в этот релиз. Люди со знаком "+" рядом с именами внесли патч впервые.

  • Aaron Critchley +

  • Alex Rychyk

  • Alexander Buchkovsky +

  • Alexander Michael Schade +

  • Крис Маццулло

  • Cornelius Riemenschneider +

  • Dave Hirschfeld +

  • David Fischer +

  • David Stansby +

  • Dror Atariah +

  • Eric Kisslinger +

  • Ханс +

  • Ingolf Becker +

  • Jan Werkmann +

  • Jeff Reback

  • Joris Van den Bossche

  • Jörg Döpfert +

  • Kevin Kuhl +

  • Krzysztof Chomski +

  • Leif Walsh

  • Licht Takeuchi

  • Manraj Singh +

  • Мэтт Бреймер-Хейс +

  • Michael Waskom +

  • Yoav Ram

  • Peter Hoffmann +

  • Robert Meyer +

  • Сэм Коэн +

  • Sietse Brouwer +

  • Свен +

  • Tim Swast

  • Tom Augspurger

  • Wes Turner

  • William Ayd +

  • Yee Mey +

  • bolkedebruin +

  • cgohlke

  • derestle-htwg +

  • fjdiod +

  • gabrielclow +

  • gfyoung

  • ghasemnaddaf +

  • jbrockmendel

  • jschendel

  • miker985 +

  • topper-123