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()引发ValueError的问题,当DataFrame具有未排序的MultiIndex列且索引器是标量时 (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)修复了在聚合一个可能导致非数值失败
ExtensionDType的DataFrame.groupby()中的回归问题 (GH 38980)修复了
Rolling.skew()和Rolling.kurt()中对对象的就地修改问题 (GH 38908)修复了
DataFrame.any()和DataFrame.all()对于时区感知的datetime64列不返回结果的问题 (GH 38723)修复了在
DataFrame.apply()中使用axis=1并在 apply 函数中使用 str 访问器时的回归问题 (GH 38979)修复了当
DataFrame具有bytes数据类型时,DataFrame.replace()引发ValueError的回归问题 (GH 38900)修复了
Series.fillna()中在使用datetime64[ns, UTC]数据类型时引发RecursionError的回归问题 (GH 38851)修复了在
NaT和datetime.date对象之间比较时错误地返回True的问题 (GH 39151)修复了在 DataFrame 上调用 NumPy
accumulate()ufuncs 时的回归问题,例如np.maximum.accumulate(df)(GH 39259)修复了
objectdtype 的类浮点字符串在小数点后尾随的 0 被截断的回归问题 (GH 38708)修复了在 PyArrow 版本 [0.16.0, 1.0.0) 中引发
AttributeError的回归问题 (GH 38801)修复了在
Index或列具有混合数据类型时,使用check_like=True调用pandas.testing.assert_frame_equal()引发TypeError的回归问题 (GH 39168)
我们已经回滚了一个导致 pandas 1.2.0 中多个绘图相关回归的提交(GH 38969, GH 38736, GH 38865, GH 38947 和 GH 39126)。因此,在 pandas 1.2.0 中报告为已修复的与条形图刻度标签不一致相关的错误再次出现(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 中,我们重构了如何在 DataFrame 上调用 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
错误修复#
在使用
float_precision="high"时,read_csv()中的错误导致段错误或长指数字符串解析错误。这导致在某些情况下出现了回归,因为在 pandas 1.2.0 中float_precision的默认值发生了变化 (GH 38753)在初始化时发生
csv.Error或UnicodeDecodeError时,read_csv()中的错误未关闭已打开的文件句柄 (GH 39024)在
Index具有混合数据类型时,pandas.testing.assert_index_equal()在check_order=False时引发TypeError的错误 (GH 39168)
其他#
已弃用的属性
_AXIS_NAMES和_AXIS_NUMBERS的DataFrame和Series将不再出现在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