Версия 0.16.2 (12 июня 2015)#
Это минорный релиз с исправлениями ошибок от версии 0.16.1 и включает большое количество
исправлений ошибок вместе с некоторыми новыми функциями (pipe() метод), улучшения и оптимизация производительности.
Мы рекомендуем всем пользователям обновиться до этой версии.
Основные моменты включают:
Что нового в v0.16.2
Новые возможности#
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)Убраны жёсткие ограничения на размер для
DataFrameHTML представление в 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.histвызывает ошибку, когда одна строкаSeriesбыл задан (подклассы. Это повлияет на порядок сортировки при сортировке DataFrame по нескольким столбцам, сортировке с ключевой функцией, создающей дубликаты, или запросе индекса сортировки при использовании)Ошибка, где
HDFStore.selectизменяет переданный список столбцов (GH 7212)Ошибка в
Categoricalrepr сdisplay.widthofNoneв 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не по умолчанию matplotlibaxes.gridнастройка (GH 9792)Ошибка, из-за которой строки, содержащие экспоненту, но без десятичной точки, парсились как
intвместоfloatвengine='python'дляread_csvparser (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