Версия 0.16.2 (12 июня 2015)#

Это минорный релиз с исправлениями ошибок от версии 0.16.1 и включает большое количество исправлений ошибок вместе с некоторыми новыми функциями (pipe() метод), улучшения и оптимизация производительности.

Мы рекомендуем всем пользователям обновиться до этой версии.

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

  • Новый pipe метод, см. здесь

  • Документация по использованию numba с pandas, см. здесь

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

Pipe#

Мы представили новый метод DataFrame.pipe(). Как следует из названия, pipe следует использовать для передачи данных через цепочку вызовов функций. Цель - избежать запутанных вложенных вызовов функций, таких как

# df is a DataFrame
# f, g, and h are functions that take and return DataFrames
f(g(h(df), arg1=1), arg2=2, arg3=3)  # noqa F821

Логика течет изнутри наружу, и имена функций отделены от их ключевых аргументов. Это можно переписать как

(
    df.pipe(h)  # noqa F821
    .pipe(g, arg1=1)  # noqa F821
    .pipe(f, arg2=2, arg3=3)  # noqa F821
)

Теперь и код, и логика идут сверху вниз. Именованные аргументы находятся рядом с их функциями. В целом код стал гораздо более читаемым.

В примере выше функции f, g, и h каждый ожидал DataFrame в качестве первого позиционного аргумента. Когда функция, которую вы хотите применить, принимает свои данные где-либо, кроме первого аргумента, передайте кортеж (function, keyword) указывая, куда должен направляться DataFrame. Например:

In [1]: import statsmodels.formula.api as sm

In [2]: bb = pd.read_csv("data/baseball.csv", index_col="id")

# sm.ols takes (formula, data)
In [3]: (
...:     bb.query("h > 0")
...:     .assign(ln_h=lambda df: np.log(df.h))
...:     .pipe((sm.ols, "data"), "hr ~ ln_h + year + g + C(lg)")
...:     .fit()
...:     .summary()
...: )
...:
Out[3]:

"""
                            OLS Regression Results
==============================================================================
Dep. Variable:                     hr   R-squared:                       0.685
Model:                            OLS   Adj. R-squared:                  0.665
Method:                 Least Squares   F-statistic:                     34.28
Date:                Tue, 22 Nov 2022   Prob (F-statistic):           3.48e-15
Time:                        05:35:23   Log-Likelihood:                -205.92
No. Observations:                  68   AIC:                             421.8
Df Residuals:                      63   BIC:                             432.9
Df Model:                           4
Covariance Type:            nonrobust
===============================================================================
                coef    std err          t      P>|t|      [0.025      0.975]
-------------------------------------------------------------------------------
Intercept   -8484.7720   4664.146     -1.819      0.074   -1.78e+04     835.780
C(lg)[T.NL]    -2.2736      1.325     -1.716      0.091      -4.922       0.375
ln_h           -1.3542      0.875     -1.547      0.127      -3.103       0.395
year            4.2277      2.324      1.819      0.074      -0.417       8.872
g               0.1841      0.029      6.258      0.000       0.125       0.243
==============================================================================
Omnibus:                       10.875   Durbin-Watson:                   1.999
Prob(Omnibus):                  0.004   Jarque-Bera (JB):               17.298
Skew:                           0.537   Prob(JB):                     0.000175
Kurtosis:                       5.225   Cond. No.                     1.49e+07
==============================================================================

Notes:
[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.
[2] The condition number is large, 1.49e+07. This might indicate that there are
strong multicollinearity or other numerical problems.
"""

Метод pipe вдохновлён unix-конвейерами, которые передают текст через процессы. В последнее время dplyr и magrittr внедрили популярный (%>%) оператор pipe для R.

См. документация для получения дополнительной информации. (GH 10129)

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

  • Добавлен rsplit в Index/Series StringMethods (GH 10303)

  • Убраны жёсткие ограничения на размер для DataFrame HTML представление в IPython notebook, и оставьте это самому IPython (только для IPython v3.0 или выше). Это устраняет дублирующиеся полосы прокрутки, которые появлялись в notebook с большими фреймами (GH 10231).

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

  • axis параметр DataFrame.quantile теперь также принимает index и column. (GH 9543)

Изменения API#

  • Holiday теперь вызывает NotImplementedError если оба offset и observance используются в конструкторе вместо возврата некорректного результата (GH 10217).

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

  • Улучшено Series.resample производительность с dtype=datetime64[ns] (GH 7754)

  • Увеличение производительности str.split когда expand=True (GH 10081)

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

  • Ошибка в Series.hist вызывает ошибку, когда одна строка Series был задан (подклассы. Это повлияет на порядок сортировки при сортировке DataFrame по нескольким столбцам, сортировке с ключевой функцией, создающей дубликаты, или запросе индекса сортировки при использовании)

  • Ошибка, где HDFStore.select изменяет переданный список столбцов (GH 7212)

  • Ошибка в Categorical repr с display.width of None в Python 3 (GH 10087)

  • Ошибка в to_json с определёнными ориентациями и CategoricalIndex вызывал бы ошибку сегментации (GH 10317)

  • Ошибка, когда некоторые функции nan не имеют согласованных возвращаемых типов данных (GH 10251)

  • Ошибка в DataFrame.quantile при проверке, что была передана допустимая ось (GH 9543)

  • Ошибка в groupby.apply агрегация для Categorical не сохраняя категории (GH 10138)

  • Ошибка в to_csv где date_format игнорируется, если datetime является дробным (GH 10209)

  • Ошибка в DataFrame.to_json со смешанными типами данных (GH 10289)

  • Ошибка в обновлении кэша при консолидации (GH 10264)

  • Ошибка в mean() где целочисленные типы данных могут переполняться (GH 10172)

  • Ошибка, где Panel.from_dict не устанавливает dtype при указании (GH 10058)

  • Ошибка в Index.union вызывает AttributeError при передаче массивоподобных объектов. (GH 10149)

  • Ошибка в Timestamp’s’ microsecond, quarter, dayofyear, week и daysinmonth свойства возвращают np.int тип, не встроенный int. (GH 10050)

  • Ошибка в NaT вызывает AttributeError при доступе к daysinmonth, dayofweek свойства. (GH 10096)

  • Ошибка в представлении Index при использовании max_seq_items=None настройка (GH 10182).

  • Ошибка при получении данных о часовом поясе с dateutil на различных платформах ( GH 9059, GH 8639, GH 9663, GH 10121)

  • Ошибка в отображении дат со смешанными частотами; отображение дат 'ms' с правильной точностью. (GH 10170)

  • Ошибка в setitem где приведение типов применяется ко всему блоку (GH 10280)

  • Ошибка в Series арифметические методы могут некорректно сохранять имена (GH 10068)

  • Ошибка в GroupBy.get_group при группировке по нескольким ключам, один из которых является категориальным. (GH 10132)

  • Ошибка в DatetimeIndex и TimedeltaIndex имена теряются после арифметики с timedelta ( GH 9926)

  • Ошибка в DataFrame создание из вложенных dict с datetime64 (GH 10160)

  • Ошибка в Series создание из dict с datetime64 ключи (GH 9456)

  • Ошибка в Series.plot(label="LABEL") неправильная установка метки (GH 10119)

  • Ошибка в plot не по умолчанию matplotlib axes.grid настройка (GH 9792)

  • Ошибка, из-за которой строки, содержащие экспоненту, но без десятичной точки, парсились как int вместо float в engine='python' для read_csv parser (GH 9565)

  • Ошибка в Series.align сбрасывает name когда fill_value указан (GH 10067)

  • Ошибка в read_csv приводит к тому, что имя индекса не устанавливается на пустом DataFrame (GH 10184)

  • Ошибка в SparseSeries.abs сбрасывает name (GH 10241)

  • Ошибка в TimedeltaIndex срезы могут сбросить freq (GH 10292)

  • Ошибка в GroupBy.get_group вызывает ValueError когда ключ группы содержит NaT (GH 6992)

  • Ошибка в SparseSeries конструктор игнорирует имя входных данных (GH 10258)

  • Ошибка в Categorical.remove_categories вызывая ValueError при удалении NaN категория, если базовый dtype является плавающей точкой (GH 10156)

  • Ошибка, когда infer_freq определяет правило времени (WOM-5XXX), не поддерживаемое to_offset (GH 9425)

  • Ошибка в DataFrame.to_hdf() где табличный формат вызывал бы, казалось бы, несвязанную ошибку для недопустимых (нестроковых) имён столбцов. Теперь это явно запрещено. (GH 9057)

  • Исправлена обработка маскирования пустых DataFrame (GH 10126).

  • Ошибка, когда интерфейс MySQL не мог обрабатывать числовые имена таблиц/столбцов (GH 10255)

  • Ошибка в read_csv с date_parser который возвращал datetime64 массив с другим временным разрешением, чем [ns] (GH 10245)

  • Ошибка в Panel.apply когда результат имеет ndim=0 (GH 10332)

  • Ошибка в read_hdf где auto_close не мог быть передан (GH 9327).

  • Ошибка в read_hdf где открытые хранилища не могли быть использованы (GH 10330).

  • Ошибка при добавлении пустого DataFrames, теперь приводит к DataFrame что .equals пустой DataFrame (GH 10181).

  • Ошибка в to_hdf и HDFStore который не проверял, что выборы complib были действительными (GH 4582, GH 8874).

Участники#

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

  • Andrew Rosenfeld

  • Artemy Kolchinsky

  • Bernard Willers +

  • Christer van der Meeren

  • Christian Hudon +

  • Константин Глен Эванс +

  • Daniel Julius Lasiman +

  • Evan Wright

  • Франческо Брунду +

  • Gaëtan de Menten +

  • Jake VanderPlas

  • James Hiebert +

  • Jeff Reback

  • Joris Van den Bossche

  • Justin Lecher +

  • Ka Wo Chen +

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

  • Mortada Mehyar

  • Morton Fox +

  • Robin Wilson +

  • Sinhrks

  • Stephan Hoyer

  • Томас Грейнджер

  • Tom Ajamian

  • Tom Augspurger

  • Yoshiki Vázquez Baeza

  • Younggun Kim

  • austinc +

  • behzad nouri

  • jreback

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

  • rekcahpassyla +

  • scls19fr

  • sinhrks