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()
的回归问题,该问题导致对int8
和int16
列引发错误 (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)修复了
NaT
和datetime.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=True
且Index
或列具有混合 dtype 时引发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)
在未对齐的 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.Error
或UnicodeDecodeError
时未关闭已打开的文件句柄 (GH 39024)修复了
pandas.testing.assert_index_equal()
的错误,该错误导致当check_order=False
且Index
具有混合 dtype 时引发TypeError
(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