Версия 0.14.1 (11 июля 2014)#

Это минорный релиз от 0.14.0, включающий небольшое количество изменений API, несколько новых функций, улучшений и оптимизаций производительности, а также большое количество исправлений ошибок. Мы рекомендуем всем пользователям обновиться до этой версии.

Изменения API#

  • Openpyxl теперь вызывает ValueError при создании writer openpyxl вместо предупреждения при импорте pandas (GH 7284).

  • Для StringMethods.extract, когда совпадение не найдено, результат - только содержащий NaN значения - теперь также имеет dtype=object вместо float (GH 7242)

  • Period объекты больше не вызывают TypeError при сравнении с использованием == с другим объектом, который не является a Period. Вместо этого при сравнении Period с другим объектом, используя == если другой объект не является Period False возвращается. (GH 7376)

  • Ранее поведение при сбросе времени или нет в offsets.apply, rollforward и rollback операции различались между смещениями. С поддержкой normalize ключевое слово для всех смещений (см. ниже) со значением по умолчанию False (сохранять время), поведение изменилось для некоторых смещений (BusinessMonthBegin, MonthEnd, BusinessMonthEnd, CustomBusinessMonthEnd, BusinessYearBegin, LastWeekOfMonth, FY5253Quarter, LastWeekOfMonth, Easter):

    In [6]: from pandas.tseries import offsets
    
    In [7]: d = pd.Timestamp('2014-01-01 09:00')
    
    # old behaviour < 0.14.1
    In [8]: d + offsets.MonthEnd()
    Out[8]: pd.Timestamp('2014-01-31 00:00:00')
    

    Начиная с версии 0.14.1 все смещения по умолчанию сохраняют время. Старое поведение можно получить с помощью normalize=True

    # new behaviour
    In [1]: d + offsets.MonthEnd()
    Out[1]: Timestamp('2014-01-31 09:00:00')
    
    In [2]: d + offsets.MonthEnd(normalize=True)
    Out[2]: Timestamp('2014-01-31 00:00:00')
    

    Обратите внимание, что для других смещений поведение по умолчанию не изменилось.

  • Добавить обратно #N/A N/A как значение NA по умолчанию при парсинге текста (регрессия с версии 0.12) (GH 5521)

  • Вызвать TypeError при установке на месте с .where и не np.nan значение, так как это противоречит выражению установки элемента, такому как df[mask] = None (GH 7656)

Улучшения#

  • Добавить dropna аргумент для value_counts и nunique (GH 5569).

  • Добавить select_dtypes() метод для выбора столбцов на основе типа данных (GH 7316). См. документация.

  • Все offsets поддерживает normalize ключевое слово для указания, следует ли offsets.apply, rollforward и rollback сбрасывает время (час, минуту и т.д.) или нет (по умолчанию False, сохраняет время) (GH 7156):

    import pandas.tseries.offsets as offsets
    
    day = offsets.Day()
    day.apply(pd.Timestamp("2014-01-01 09:00"))
    
    day = offsets.Day(normalize=True)
    day.apply(pd.Timestamp("2014-01-01 09:00"))
    
  • PeriodIndex представлен в том же формате, что и DatetimeIndex (GH 7601)

  • StringMethods теперь работает с пустыми Series (GH 7242)

  • Файловые парсеры read_csv и read_table теперь игнорируют комментарии строк, предоставленные параметром comment, который принимает только один символ для C-ридера. В частности, они позволяют использовать комментарии перед началом данных файла (GH 2685)

  • Добавить NotImplementedError для одновременного использования chunksize и nrows для read_csv() (GH 6774).

  • Тесты для базового чтения публичных сегментов S3 теперь существуют (GH 7281).

  • read_html теперь имеет encoding аргумент, который передается в нижележащую библиотеку парсера. Вы можете использовать это для чтения веб-страниц, закодированных не в ASCII (GH 7323).

  • read_excel теперь поддерживает чтение из URL таким же образом, как read_csv делает. (GH 6809)

  • Поддержка часовых поясов dateutil, которые теперь можно использовать так же, как часовые пояса pytz во всех pandas. (GH 4688)

    In [3]: rng = pd.date_range(
       ...:     "3/6/2012 00:00", periods=10, freq="D", tz="dateutil/Europe/London"
       ...: )
       ...: 
    
    In [4]: rng.tz
    Out[4]: tzfile('/usr/share/zoneinfo/Europe/London')
    

    См. документация.

  • Реализовано sem (стандартная ошибка среднего) операция для Series, DataFrame, Panel, и Groupby (GH 6897)

  • Добавить nlargest и nsmallest в Series groupby список разрешённых, что означает, что теперь вы можете использовать эти методы на SeriesGroupBy объект (GH 7053).

  • Все смещения apply, rollforward и rollback теперь может обрабатывать np.datetime64, ранее приводило к ApplyTypeError (GH 7452)

  • Period и PeriodIndex может содержать NaT в его значениях (GH 7485)

  • Поддержка сериализации (pickling) Series, DataFrame и Panel объектов с неуникальными метками вдоль item ось (index, columns и items соответственно) (GH 7370).

  • Улучшенный вывод типа для datetime/timedelta со смешанными null-объектами. Регрессия с версии 0.13.1 в интерпретации объектного Index со всеми null-элементами (GH 7431)

Производительность#

  • Улучшения в определении типа данных для числовых операций, приводящие к повышению производительности для типов данных: int64, timedelta64, datetime64 (GH 7223)

  • Улучшения в Series.transform для значительного повышения производительности (GH 6496)

  • Улучшения в DataFrame.transform с ufuncs и встроенными функциями группировки для значительного повышения производительности (GH 7383)

  • Регрессия в агрегации groupby для типов datetime64 (GH 7555)

  • Улучшения в MultiIndex.from_product для больших итерируемых объектов (GH 7627)

Экспериментальный#

  • pandas.io.data.Options имеет новый метод, get_all_data метод, и теперь последовательно возвращает MultiIndexed DataFrame (GH 5602)

  • io.gbq.read_gbq и io.gbq.to_gbq были переработаны для удаления зависимости от Google bq.py клиент командной строки. Этот подмодуль теперь использует httplib2 и Google apiclient и oauth2client клиентские библиотеки API которые должны быть более стабильными и, следовательно, надежными, чем bq.py. См. документация. (GH 6937).

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

  • Ошибка в DataFrame.where с симметричным фреймом и переданным другим DataFrame (GH 7506)

  • Ошибка в индексировании Panel с осью MultiIndex (GH 7516)

  • Регрессия в индексации срезов даты/времени с дублированным индексом и неточными конечными точками (GH 7523)

  • Ошибка в setitem со списком списков и одиночными vs смешанными типами (GH 7551:)

  • Ошибка в операциях со временем с невыровненными Series (GH 7500)

  • Ошибка в определении timedelta при назначении неполной Series (GH 7592)

  • Ошибка в groupby .nth с Series и целочисленным именем столбца (GH 7559)

  • Ошибка в Series.get с булевым аксессором (GH 7407)

  • Ошибка в value_counts где NaT не квалифицировались как пропущенные (NaN) (GH 7423)

  • Ошибка в to_timedelta который принимал недопустимые единицы измерения и неправильно интерпретировал 'm/h' (GH 7611, GH 6423)

  • Ошибка в линейном графике не устанавливает правильный xlim if secondary_y=True (GH 7459)

  • Ошибка в сгруппированном hist и scatter графики используют старые figsize по умолчанию (GH 7394)

  • Ошибка при построении подграфиков с DataFrame.plot, hist очищает переданные ax даже если количество подграфиков равно одному (GH 7391).

  • Ошибка при построении подграфиков с DataFrame.boxplot с by kw вызывает ValueError если количество подграфиков превышает 1 (GH 7391).

  • Ошибка в отображении подграфиков ticklabels и labels в другом правиле (GH 5897)

  • Ошибка в Panel.apply с MultiIndex в качестве оси (GH 7469)

  • Ошибка в DatetimeIndex.insert не сохраняет name и tz (GH 7299)

  • Ошибка в DatetimeIndex.asobject не сохраняет name (GH 7299)

  • Ошибка в срезе MultiIndex с диапазонами, похожими на дату и время (строки и Timestamps), (GH 7429)

  • Ошибка в Index.min и max не обрабатывает nan и NaT правильно (GH 7261)

  • Ошибка в PeriodIndex.min/max приводит к int (GH 7609)

  • Ошибка в resample где fill_method игнорировался, если вы передавали how (GH 2073)

  • Ошибка в TimeGrouper не исключает столбец, указанный key (GH 7227)

  • Ошибка в DataFrame и Series график bar и barh вызывает TypeError когда bottom и left указано ключевое слово (GH 7226)

  • Ошибка в DataFrame.hist вызывает TypeError когда он содержит нечисловой столбец (GH 7277)

  • Ошибка в Index.delete не сохраняет name и freq атрибуты (GH 7302)

  • Ошибка в DataFrame.query()/eval где локальные строковые переменные со знаком @ обрабатывались как временные, которые пытались удалить (GH 7300).

  • Ошибка в Float64Index который не допускал дубликатов (GH 7149).

  • Ошибка в DataFrame.replace() где истинные значения заменялись (GH 7140).

  • Ошибка в StringMethods.extract() где одиночная Series группы соответствия будет использовать имя сопоставителя вместо имени группы (GH 7313).

  • Ошибка в isnull() когда mode.use_inf_as_null == True где isnull не будет проверять True когда он встречал inf/-inf (GH 7315).

  • Ошибка в inferred_freq приводит к None для часовых поясов восточного полушария (GH 7310)

  • Ошибка в Easter возвращает неверную дату, когда смещение отрицательное (GH 7195)

  • Ошибка в широковещательной передаче с .div, целочисленные типы данных и деление на ноль (GH 7325)

  • Ошибка в CustomBusinessDay.apply вызывает NameError когда np.datetime64 передается объект (GH 7196)

  • Ошибка в MultiIndex.append, concat и pivot_table не сохраняют часовой пояс (GH 6606)

  • Ошибка в .loc со списком индексаторов на одном уровне мультииндекса (который не вложен) (GH 7349)

  • Ошибка в Series.map при отображении словаря с ключами-кортежами разной длины (GH 7333)

  • Исправление всех StringMethods теперь работает с пустыми Series (GH 7242)

  • Исправлено делегирование read_sql to read_sql_query когда запрос не содержит 'select' (GH 7324).

  • Ошибка, при которой присвоение имени столбца строкового типа DataFrame с Float64Index вызывал TypeError во время вызова np.isnan (GH 7366).

  • Ошибка, где NDFrame.replace() неправильно заменял объекты на Period значения (GH 7379).

  • Ошибка в .ix getitem всегда должен возвращать Series (GH 7150)

  • Ошибка при срезе MultiIndex с неполными индексаторами (GH 7399)

  • Ошибка в срезе MultiIndex с шагом в срезанном уровне (GH 7400)

  • Ошибка, когда отрицательные индексаторы в DatetimeIndex не были правильно срезаны (GH 7408)

  • Ошибка, где NaT не отображался корректно в MultiIndex (GH 7406, GH 7409).

  • Ошибка, при которой логические объекты преобразовывались в nan в convert_objects (GH 7416).

  • Ошибка в quantile игнорируя аргумент axis (GH 7306)

  • Ошибка, где nanops._maybe_null_out не работает с комплексными числами (GH 7353)

  • Ошибка в нескольких nanops функции, когда axis==0 для 1-мерных nan массивы (GH 7354)

  • Ошибка, где nanops.nanmedian не работает, когда axis==None (GH 7352)

  • Ошибка, где nanops._has_infs не работает со многими типами данных (GH 7357)

  • Ошибка в StataReader.data где чтение dta с 0 наблюдений завершалось ошибкой (GH 7369)

  • Ошибка в StataReader при чтении файлов Stata 13 (117), содержащих строки фиксированной ширины (GH 7360)

  • Ошибка в StataWriter где кодировка игнорировалась (GH 7286)

  • Ошибка в DatetimeIndex сравнение не обрабатывает NaT правильно (GH 7529)

  • Ошибка при передаче входных данных с tzinfo к некоторым смещениям apply, rollforward или rollback сбрасывает tzinfo или вызывает ValueError (GH 7465)

  • Ошибка в DatetimeIndex.to_period, PeriodIndex.asobject, PeriodIndex.to_timestamp не сохраняет name (GH 7485)

  • Ошибка в DatetimeIndex.to_period и PeriodIndex.to_timestamp обрабатывать NaT некорректно (GH 7228)

  • Ошибка в offsets.apply, rollforward и rollback может возвращать обычные datetime (GH 7502)

  • Ошибка в resample вызывает ValueError когда цель содержит NaT (GH 7227)

  • Ошибка в Timestamp.tz_localize сбрасывает nanosecond info (GH 7534)

  • Ошибка в DatetimeIndex.asobject вызывает ValueError когда он содержит NaT (GH 7539)

  • Ошибка в Timestamp.__new__ не сохраняет наносекунды должным образом (GH 7610)

  • Ошибка в Index.astype(float) где он возвращал бы object dtype Index (GH 7464).

  • Ошибка в DataFrame.reset_index теряет tz (GH 3950)

  • Ошибка в DatetimeIndex.freqstr вызывает AttributeError когда freq является None (GH 7606)

  • Ошибка в GroupBy.size созданный TimeGrouper вызывает AttributeError (GH 7453)

  • Ошибка: столбчатая диаграмма с одним столбцом смещена (GH 7498).

  • Ошибка в area plot с временными рядами с учётом часового пояса вызывает ValueError (GH 7471)

  • Ошибка в немонотонном Index.union может сохранять name некорректно (GH 7458)

  • Ошибка в DatetimeIndex.intersection не сохраняет часовой пояс (GH 4690)

  • Ошибка в rolling_var где окно больше массива вызвало бы ошибку (GH 7297)

  • Ошибка с последним построенным временным рядом, определяющим xlim (GH 2960)

  • Ошибка с secondary_y ось не учитывается для временных рядов xlim (GH 3490)

  • Ошибка в Float64Index присваивание с нескалярным индексатором (GH 7586)

  • Ошибка в pandas.core.strings.str_contains не корректно сопоставляет без учёта регистра, когда regex=False и case=False (GH 7505)

  • Ошибка в expanding_cov, expanding_corr, rolling_cov, и rolling_corr для двух аргументов с несовпадающим индексом (GH 7512)

  • Ошибка в to_sql принимая булеву колонку как текстовую колонку (GH 7678)

  • Ошибка в сгруппированном hist не обрабатывает rot kw и sharex kw правильно (GH 7234)

  • Ошибка в .loc выполнение резервного целочисленного индексирования с object индексы типа данных (GH 7496)

  • Ошибка (регрессия) в PeriodIndex конструктора при передаче Series объекты (GH 7701).

Участники#

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

  • Andrew Rosenfeld

  • Andy Hayden

  • Benjamin Adams +

  • Бенджамин М. Гросс +

  • Brian Quistorff +

  • Brian Wignall +

  • DSM

  • Daniel Waeber

  • David Bew +

  • David Stephens

  • Джейкоб Шаер

  • Ян Шульц

  • John David Reaver

  • John W. O’Brien

  • Joris Van den Bossche

  • Julien Danjou +

  • K.-Michael Aye

  • Кевин Шеппард

  • Кайл Мейер

  • Мэтт Виттманн

  • Мэтью Бретт +

  • Michael Mueller +

  • Mortada Mehyar

  • Филлип Клауд

  • Rob Levy +

  • Schaer, Jacob C +

  • Stephan Hoyer

  • Томас Клуйвер

  • Todd Jennings

  • Tom Augspurger

  • TomAugspurger

  • bwignall

  • clham

  • dsm054 +

  • helger +

  • immerrr

  • jaimefrio

  • jreback

  • лексический

  • onesandzeroes

  • rockg

  • sanguineturtle +

  • seth-p +

  • sinhrks

  • неизвестный

  • yelite +