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()
设置值时的回归问题,该问题在使用MultiIndex
和类列表列索引扩展DataFrame
时会引发KeyError
(GH 39147)修复了使用
groupby()
和Categorical
分组列时,grouped.indices
不显示未使用类别的问题 (GH 38642)修复了
DataFrameGroupBy.sem()
和SeriesGroupBy.sem()
中的回归问题,该问题导致存在非数字列时引发错误而不是被丢弃 (GH 38774)修复了
DataFrameGroupBy.diff()
中对int8
和int16
列引发错误的问题 (GH 39050)修复了
DataFrame.groupby()
在聚合ExtensionDType
时,对于非数字值可能失败的回归问题 (GH 38980)修复了
Rolling.skew()
和Rolling.kurt()
修改对象本身(inplace)的回归问题 (GH 38908)修复了
DataFrame.any()
和DataFrame.all()
对于时区感知datetime64
列不返回结果的回归问题 (GH 38723)修复了
DataFrame.apply()
使用axis=1
且在应用函数中使用 str 访问器时的回归问题 (GH 38979)修复了
DataFrame.replace()
在DataFrame
的 dtype 为bytes
时引发ValueError
的回归问题 (GH 38900)修复了
Series.fillna()
使用datetime64[ns, UTC]
dtype 时引发RecursionError
的回归问题 (GH 38851)修复了
NaT
和datetime.date
对象之间比较错误返回True
的回归问题 (GH 39151)修复了在 DataFrames 上调用 NumPy
accumulate()
ufuncs 的回归问题,例如np.maximum.accumulate(df)
(GH 39259)修复了
object
dtype 浮点数字符串的 repr 中,小数点后的尾随 0 被截断的回归问题 (GH 38708)修复了在 PyArrow 版本 [0.16.0, 1.0.0) 下引发
AttributeError
的回归问题 (GH 38801)修复了
pandas.testing.assert_frame_equal()
在check_like=True
且Index
或列具有混合 dtype 时引发TypeError
的回归问题 (GH 39168)
我们已回滚了导致 pandas 1.2.0 中出现多个绘图相关回归的提交 (GH 38969, GH 38736, GH 38865, GH 38947 和 GH 39126)。因此,之前在 pandas 1.2.0 中报告已修复的关于柱状图刻度标签不一致的 bug 又重新出现 (GH 26186 和 GH 11465)
在非对齐的 DataFrames 上调用 NumPy ufuncs#
在 pandas 1.2.0 之前,在非对齐的 DataFrames(或 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 中,我们重构了在 DataFrames 上调用 NumPy ufuncs 的方式,这开始首先对齐输入 (GH 39184),这与其他 pandas 操作以及在 Series 对象上调用 ufuncs 的方式一致。
对于 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"
时导致的段错误或长指数字符串解析错误。这在某些情况下引起了回归,因为float_precision
的默认值在 pandas 1.2.0 中被更改 (GH 38753)修复了
read_csv()
在初始化时发生csv.Error
或UnicodeDecodeError
时未关闭已打开文件句柄的 bug (GH 39024)修复了
pandas.testing.assert_index_equal()
在check_order=False
且Index
具有混合 dtype 时引发TypeError
的 bug (GH 39168)
其他#
已弃用的
DataFrame
和Series
属性_AXIS_NAMES
和_AXIS_NUMBERS
将不再显示在dir
或inspect.getmembers
调用中 (GH 38740)将 fastparquet 的最低版本提升至 0.4.0,以避免 numba 引发的
AttributeError
(GH 38344)将 pymysql 的最低版本提升至 0.8.1,以避免测试失败 (GH 38344)
修复了在 Python 3.9.1 的 MacOS 11 上构建失败的问题 (GH 38766)
在 pandas 1.1.0 新特性 中添加了对
testing.assert_frame_equal()
和testing.assert_series_equal()
中向后不兼容的check_freq
参数的引用 (GH 34050)
贡献者#
共有 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