版本 0.16.2(2015 年 6 月 12 日)#

这是 0.16.1 的一个小错误修复版本,包括大量错误修复以及一些新功能(pipe()方法)、增强功能和性能改进。

我们建议所有用户升级到此版本。

亮点包括:

  • pipe方法请看这里

  • 有关如何将numbapandas一起使用的文档,请参阅此处

新功能

管道

我们引入了一种新方法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
)

现在代码和逻辑都是从上到下流动的。关键字参数位于其函数旁边。总体而言,代码更具可读性。

在上面的示例中,函数fgh每个函数都期望 DataFrame 作为第一个位置参数。当您希望应用的函数在第一个参数以外的任何地方获取其数据时,请传递一个元组来指示 DataFrame 应流向的位置。例如:(function, keyword)

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]:
<class 'statsmodels.iolib.summary.Summary'>
"""
                            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 管道,它通过进程传输文本。最近dplyrmagrittr(%>%)R引入了流行的管道运算符。

请参阅文档了解更多信息。 (GH 10129

其他增强功能#

  • 添加rsplit到索引/系列 StringMethods ( GH 10303 )

  • DataFrame删除了IPython 笔记本中 HTML 表示的硬编码大小限制,并将其留给 IPython 本身(仅适用于 IPython v3.0 或更高版本)。这消除了大框架笔记本中出现的重复滚动条(GH 10231)。

    请注意,笔记本电脑具有限制显示非常大的帧的功能(通过单击输出的左侧)。您还可以使用 pandas 选项配置 DataFrame 的显示方式,请参阅此处toggle output scrolling

  • axisnow的参数DataFrame.quantile也接受indexcolumn。 ( GH 9543 )

API 更改#

  • Holiday现在,NotImplementedError如果在构造函数中同时使用offset和 ,则会引发observance错误,而不是返回不正确的结果(GH 10217)。

性能改进#

  • 使用( GH 7754 )提高Series.resample性能dtype=datetime64[ns]

  • 提高性能( str.splitGH 10081 )expand=True

Bug修复

  • 当给出Series.hist一行时,错误会引发错误( GH 10214Series

  • HDFStore.select修改传递的列列表的错误( GH 7212

  • Python 3 中的Categoricalrepr中display.width的错误( GH 10087None

  • to_json某些方向的错误和CategoricalIndex会出现段错误(GH 10317

  • 某些 nan 函数没有一致的返回数据类型的错误(GH 10251

  • DataFrame.quantile检查是否传递了有效轴时出现错误( GH 9543

  • groupby.apply聚合中不保留类别的错误CategoricalGH 10138

  • 如果是小数,则忽略to_csv其中的错误(GH 10209date_formatdatetime

  • DataFrame.to_json混合数据类型的错误( GH 10289

  • 合并时缓存更新中的错误 ( GH 10264 )

  • 整数数据类型可能溢出的错误mean()GH 10172

  • Panel.from_dict指定时不设置 dtype 的错误( GH 10058 )

  • 传递类似数组时会Index.union引发错误。 AttributeErrorGH 10149

  • Timestamp's' microsecondquarterdayofyear和属性返回类型中的错误,week而不是内置的。 (GH 10050daysinmonthnp.intint

  • 访问,属性时会NaT引发错误。 (GH 10096AttributeErrordaysinmonthdayofweek

  • 使用该设置时索引 repr 中存在错误max_seq_items=NoneGH 10182)。

  • dateutil在各种平台上获取时区数据时出现错误( GH 9059GH 8639GH 9663GH 10121

  • 显示混合频率的日期时间时出现错误;以正确的精度显示“ms”日期时间。 (GH 10170

  • setitem类型提升应用于整个块的错误( GH 10280

  • Series算术方法中的错误可能会错误地保存名称( GH 10068

  • 对多个键进行分组时出现错误GroupBy.get_group,其中之一是分类键。 (GH 10132

  • timedelta 算术后出现错误DatetimeIndexTimedeltaIndex名称丢失(GH 9926

  • 嵌套DataFrame结构中的错误(GH 10160dictdatetime64

  • 使用钥匙Series的构造错误(GH 9456dictdatetime64

  • 错误Series.plot(label="LABEL")设置标签不正确(GH 10119

  • plot不默认 matplotlib 设置的错误axes.gridGH 9792

  • 导致字符串包含指数但没有小数点的错误,而int不是解析器解析的float小数点(GH 9565engine='python'read_csv

  • 指定时Series.align重置中的错误( GH 10067namefill_value

  • read_csv导致未在空 DataFrame 上设置索引名称的错误( GH 10184

  • SparseSeries.abs重置中的错误nameGH 10241

  • 切片中的错误TimedeltaIndex可能会重置频率(GH 10292

  • 当组密钥包含(GH 6992)时会GroupBy.get_group引发错误ValueErrorNaT

  • 构造函数中的错误SparseSeries忽略输入数据名称(GH 10258

  • 如果底层数据类型是浮点,则删除类别时Categorical.remove_categories会导致错误( GH 10156ValueErrorNaN

  • infer_freq 推断 to_offset 不支持的时间规则 (WOM-5XXX) 的错误 ( GH 9425 )

  • where 表格式中的错误DataFrame.to_hdf()会针对无效(非字符串)列名称引发看似不相关的错误。现在这是明确禁止的。 ( GH 9057 )

  • 处理空屏蔽的错误DataFrameGH 10126)。

  • MySQL 接口无法处理数字表/列名称的错误 ( GH 10255 )

  • 错误返回了除(GH 10245)之外的其他时间分辨率的read_csv数组date_parserdatetime64[ns]

  • Panel.apply当结果 ndim=0 时出现错误( GH 10332

  • read_hdf无法通过的错误auto_closeGH 9327)。

  • read_hdf无法使用开放商店的错误( GH 10330)。

  • 添加empty时出现错误DataFrames,现在会导致一个DataFrame.equalsDataFrameGH 10181)。

  • 错误to_hdfHDFStore没有检查 complib 选择是否有效(GH 4582GH 8874)。

贡献者#

共有 34 人为此版本贡献了补丁。名字带有“+”的人首次贡献了补丁。

  • 安德鲁·罗森菲尔德

  • 阿特米·科尔钦斯基

  • 伯纳德·威勒斯 +

  • 克里斯特·范德梅伦

  • 克里斯蒂安·休顿 +

  • 康斯坦丁·格伦·埃文斯 +

  • 丹尼尔·朱利叶斯·拉西曼 +

  • 埃文·赖特

  • 弗朗西斯科·布伦杜 +

  • 加埃坦·德·门滕 +

  • 杰克·范德·普拉斯

  • 詹姆斯·希伯特 +

  • 杰夫·雷巴克

  • 乔里斯·范登博什

  • 贾斯汀·莱彻 +

  • 陈嘉禾 +

  • 凯文·谢泼德

  • 莫尔塔达·梅哈尔

  • 莫顿·福克斯 +

  • 罗宾·威尔逊 +

  • 辛赫克斯

  • 史蒂芬·霍耶

  • 托马斯·格兰杰

  • 汤姆·阿贾米安

  • 汤姆·奥格斯普格

  • 吉树·巴斯克斯·巴埃萨

  • 金英根

  • 奥斯汀+

  • 贝赫扎德·努里

  • 杰雷巴克

  • 性的

  • 雷克恰帕西拉 +

  • scls19fr

  • 辛赫克斯