1.2.1 版本新特性 (2021年1月20日)#

以下是 pandas 1.2.1 中的改动。请参阅 发布说明 以获取包含其他 pandas 版本的完整变更日志。

修复的回归问题#

  • 修复了 to_csv() 的回归问题,该问题导致当行数多于 chunksize 时创建损坏的 zip 文件 (GH 38714)

  • 修复了 to_csv() 的回归问题,该问题导致以二进制模式而非文本模式打开 codecs.StreamReaderWriter (GH 39247)

  • 修复了 read_csv() 及其他读取函数的回归问题,该问题导致未指定编码时,编码错误处理策略 (errors) 未默认设置为 "replace" (GH 38989)

  • 修复了 read_excel() 在处理非原始字节文件句柄时的回归问题 (GH 38788)

  • 修复了 DataFrame.to_stata() 的回归问题,该问题导致在发生错误时未删除创建的文件 (GH 39202)

  • 修复了 DataFrame.__setitem__ 的回归问题,该问题导致在扩展 DataFrame 且新列类型为 "0 - name" 时引发 ValueError (GH 39010)

  • 修复了使用 DataFrame.loc() 进行设置时的回归问题,该问题导致当 DataFrame 包含未排序的 MultiIndex 列且索引器为标量时引发 ValueError (GH 38601)

  • 修复了使用 DataFrame.loc() 进行设置时的回归问题,该问题导致当 DataFrame 扩展时,使用 MultiIndex 和列表式列索引器会引发 KeyError (GH 39147)

  • 修复了 groupby() 的回归问题,该问题导致使用 Categorical 分组列时,grouped.indices 不显示未使用的类别 (GH 38642)

  • 修复了 DataFrameGroupBy.sem()SeriesGroupBy.sem() 的回归问题,该问题导致非数值列的存在会引发错误而非被丢弃 (GH 38774)

  • 修复了 DataFrameGroupBy.diff() 的回归问题,该问题导致对 int8int16 列引发错误 (GH 39050)

  • 修复了 DataFrame.groupby() 的回归问题,该问题导致当聚合 ExtensionDType 且包含非数值时可能失败 (GH 38980)

  • 修复了 Rolling.skew()Rolling.kurt() 的回归问题,该问题导致修改对象本身 (GH 38908)

  • 修复了 DataFrame.any()DataFrame.all() 的回归问题,该问题导致对时区感知型 datetime64 列未返回结果 (GH 38723)

  • 修复了 DataFrame.apply() 的回归问题,该问题导致在 apply 函数中使用 str 访问器时 axis=1 出现错误 (GH 38979)

  • 修复了 DataFrame.replace() 的回归问题,该问题导致当 DataFrame 的 dtype 为 bytes 时引发 ValueError (GH 38900)

  • 修复了 Series.fillna() 的回归问题,该问题导致在处理 datetime64[ns, UTC] dtype 时引发 RecursionError (GH 38851)

  • 修复了 NaTdatetime.date 对象之间的比较错误返回 True 的回归问题 (GH 39151)

  • 修复了对 DataFrames 调用 NumPy accumulate() ufuncs 的回归问题,例如 np.maximum.accumulate(df) (GH 39259)

  • 修复了 object dtype 浮点数型字符串在十进制后截断尾随 0 的 repr 回归问题 (GH 38708)

  • 修复了在 PyArrow 版本 [0.16.0, 1.0.0) 中引发 AttributeError 的回归问题 (GH 38801)

  • 修复了 pandas.testing.assert_frame_equal() 的回归问题,该问题导致当 check_like=TrueIndex 或列具有混合 dtype 时引发 TypeError (GH 39168)

我们已回滚一个导致 pandas 1.2.0 中出现多项绘图相关回归的提交 (GH 38969, GH 38736, GH 38865, GH 38947GH 39126)。因此,在 pandas 1.2.0 中报告为已修复的与条形图刻度标签不一致相关的错误再次出现 (GH 26186GH 11465)

在未对齐的 DataFrame 上调用 NumPy ufunc#

在 pandas 1.2.0 之前,在未对齐的 DataFrame(或 DataFrame/Series 组合)上调用 NumPy ufunc 会忽略索引,仅按形状匹配输入,并使用第一个 DataFrame 的索引/列作为结果

In [1]: df1 = pd.DataFrame({"a": [1, 2], "b": [3, 4]}, index=[0, 1])
In [2]: df2 = pd.DataFrame({"a": [1, 2], "b": [3, 4]}, index=[1, 2])
In [3]: df1
Out[3]:
   a  b
0  1  3
1  2  4
In [4]: df2
Out[4]:
   a  b
1  1  3
2  2  4

In [5]: np.add(df1, df2)
Out[5]:
   a  b
0  2  6
1  4  8

这与 pandas 其他操作的工作方式不同,后者会首先对齐输入

In [6]: df1 + df2
Out[6]:
     a    b
0  NaN  NaN
1  3.0  7.0
2  NaN  NaN

在 pandas 1.2.0 中,我们重构了在 DataFrame 上调用 NumPy ufunc 的方式,并开始首先对齐输入 (GH 39184),这与 pandas 的其他操作以及在 Series 对象上调用 ufunc 的情况相同。

对于 pandas 1.2.1,我们恢复了之前的行为以避免破坏性更改,但上述 np.add(df1, df2) 带有未对齐输入的示例现在将引发警告,而未来的 pandas 2.0 版本将开始首先对齐输入 (GH 39184)。在 Series 对象上调用 NumPy ufunc(例如 np.add(s1, s2))已经对齐并将继续如此。

为了避免警告并保持当前忽略索引的行为,请将其中一个参数转换为 NumPy 数组

In [7]: np.add(df1, np.asarray(df2))
Out[7]:
   a  b
0  2  6
1  4  8

要获得未来的行为并消除警告,您可以在将参数传递给 ufunc 之前手动对齐

In [8]: df1, df2 = df1.align(df2)
In [9]: np.add(df1, df2)
Out[9]:
     a    b
0  NaN  NaN
1  3.0  7.0
2  NaN  NaN

错误修复#

  • 修复了 read_csv() 的错误,该错误导致 float_precision="high" 时出现段错误或长指数字符串解析错误。由于 pandas 1.2.0 中 float_precision 的默认值已更改,这在某些情况下导致了回归 (GH 38753)

  • 修复了 read_csv() 的错误,该错误导致在初始化期间发生 csv.ErrorUnicodeDecodeError 时未关闭已打开的文件句柄 (GH 39024)

  • 修复了 pandas.testing.assert_index_equal() 的错误,该错误导致当 check_order=FalseIndex 具有混合 dtype 时引发 TypeError (GH 39168)

其他#

贡献者#

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

  • Ada Draginda +

  • Andrew Wieteska

  • Bryan Cutler

  • Fangchen Li

  • Joris Van den Bossche

  • Matthew Roeschke

  • Matthew Zeitlin +

  • MeeseeksMachine

  • Micael Jarniac

  • Omar Afifi +

  • Pandas Development Team

  • Richard Shadrach

  • Simon Hawkins

  • Terji Petersen

  • Torsten Wörtwein

  • WANG Aiyong

  • jbrockmendel

  • kylekeppler

  • mzeitlin11

  • patrick