Pandas 更新至 2.1.0 版本
目前 pandas 在 20230830 发布其 2.1.0 版本 ,该版本相较于在 20230628 的 2.0.3 版本还是有较多的改动及提升。本次主要列出需要关注的重点,更多请查看 pandas 更新说明!
Pandas 发布说明主要组成部分
Pandas 的发布说明(Release Notes)是由多个部分组成的,每个部分都描述了在新版本中进行的一些主要更改。以下是这些部分的一般结构:
-
What's New:这部分列出了新版本中的所有新功能和改进。这些可能包括新的函数、方法或类,或者现有功能的重大改进。每个新功能或改进都会有一个简短的描述,通常还会附带一个链接,链接到具体的 GitHub 问题或请求,以便读者可以获取更详细的信息。 -
Enhancements:这部分详细列出了所有的增强功能。增强功能通常包括对现有功能的改进,例如性能提升、新的参数选项等。 -
Bug Fixes:这部分列出了在新版本中修复的所有已知错误。每个错误修复都会有一个描述,解释了错误的性质以及修复的结果。像其他部分一样,每个错误修复通常都会链接到相关的 GitHub 问题。 -
Breaking Changes:这部分列出了所有可能影响现有代码行为的更改。这些更改可能包括函数或方法的签名更改、默认行为的更改等。对于每个破坏性更改,发布说明都会解释更改的原因,以及如果需要的话,如何修改现有代码以适应这些更改。 -
Deprecations:这部分列出了所有已弃用的功能。当一个功能被弃用时,这意味着它在未来的某个版本中将被删除。弃用通知旨在给开发人员提供时间来更新他们的代码,以避免在功能被删除时出现问题。 -
Version Summary:这部分提供了新版本的概述,包括新版本中的主要更改、修复的错误数、关闭的 GitHub 问题数等。 -
Contributors:这部分主要会列出所有对此次版本升级做出贡献的作者昵称。
主要改动
-
本次 pandas 2.1.0 版本开始,主要支持 Python 3.9 及以上版本,对于用于较低版本的开发者建议尽快更新 -
pandas 3.0 版本开始会默认支持 PyArrow,即后续支持的数据类型以 PyArrow 支持的为准,此项改动将较大的提升性能 -
对 pandas.DataFrame.map() 和 pandas.DataFrame.stack() 方法有较大改动。其中 pandas.DataFrame.map() 是新增的,主要是替换原来的 pandas.DataFrame.applymap() 方法。而对 pandas.DataFrame.stack() 则是重新实现该方法,新增 future_stack 参数
重点关注
pandas 2.1.0 弃用了在类似 setitem 的 Series 操作中的静默类型转换:在 Series(或DataFrame列)的类似 setitem 的操作中,静默进行的类型转换已被弃用,并显示警告。受影响的操作示例包括:
ser.fillna('foo', inplace=True)
ser.where(ser.isna(), 'foo', inplace=True)
ser.iloc[indexer] = 'foo'
ser.loc[indexer] = 'foo'
df.iloc[indexer, 0] = 'foo'
df.loc[indexer, 'a'] = 'foo'
ser[indexer] = 'foo'
示例
在 pandas 2.1.0 版本之前
In [1]: ser = pd.Series([1, 2, 3])
In [2]: ser
Out[2]:
0 1
1 2
2 3
dtype: int64
In [3]: ser[0] = 'not an int64'
In [4]: ser
Out[4]:
0 not an int64
1 2
2 3
dtype: object
其默认支持将数据类型转换为 object,以支持 int64 和 str 共存!
而在 pandas 2.1.0 及以后的版本中:
In [1]: ser = pd.Series([1, 2, 3])
In [2]: ser
Out[2]:
0 1
1 2
2 3
dtype: int64
In [3]: ser[0] = 'not an int64'
FutureWarning:
Setting an item of incompatible dtype is deprecated and will raise in a future error of pandas.
Value 'not an int64' has dtype incompatible with int64, please explicitly cast to a compatible dtype first.
In [4]: ser
Out[4]:
0 not an int64
1 2
2 3
dtype: object
必须做显示的类型转换,否则就会出现警告或者报错。显示类型转换的方式可以参考主要如下:
-
转换为 object 类型
In [21]: ser = pd.Series([1, 2, 3])
In [22]: ser = ser.astype('object')
In [23]: ser[0] = 'not an int64'
In [24]: ser
Out[24]:
0 not an int64
1 2
2 3
dtype: object
-
转换为 float64 类型
In [25]: ser = pd.Series([1, 2, 3])
In [26]: ser = ser.astype('float64')
In [27]: ser[0] = 1.1
In [28]: ser
Out[28]:
0 1.1
1 2.0
2 3.0
dtype: float64
可以根据自己的需求来显式转换数据类型,以防止出现不可预料的错误!
"object"类型可以包含各种Python对象,如字符串、列表、字典、函数等。由于"object"类型是一种通用的类型,它在执行某些操作时可能会有一些限制,因为Pandas无法对其中的具体数据类型进行优化。
参考资料
-
更新说明地址:https://pandas.pydata.org/docs/whatsnew/v2.1.0.html
评论