Pandas 更新至 2.1.0 版本

数据科学实战

共 4637字,需浏览 10分钟

 · 2023-09-06

目前 pandas 在 20230830  发布其 2.1.0 版本 ,该版本相较于在 20230628 的 2.0.3 版本还是有较多的改动及提升。本次主要列出需要关注的重点,更多请查看 pandas 更新说明!

Pandas 发布说明主要组成部分

Pandas 的发布说明(Release Notes)是由多个部分组成的,每个部分都描述了在新版本中进行的一些主要更改。以下是这些部分的一般结构:

  1. What's New:这部分列出了新版本中的所有新功能和改进。这些可能包括新的函数、方法或类,或者现有功能的重大改进。每个新功能或改进都会有一个简短的描述,通常还会附带一个链接,链接到具体的 GitHub 问题或请求,以便读者可以获取更详细的信息。
  2. Enhancements:这部分详细列出了所有的增强功能。增强功能通常包括对现有功能的改进,例如性能提升、新的参数选项等。
  3. Bug Fixes:这部分列出了在新版本中修复的所有已知错误。每个错误修复都会有一个描述,解释了错误的性质以及修复的结果。像其他部分一样,每个错误修复通常都会链接到相关的 GitHub 问题。
  4. Breaking Changes:这部分列出了所有可能影响现有代码行为的更改。这些更改可能包括函数或方法的签名更改、默认行为的更改等。对于每个破坏性更改,发布说明都会解释更改的原因,以及如果需要的话,如何修改现有代码以适应这些更改。
  5. Deprecations:这部分列出了所有已弃用的功能。当一个功能被弃用时,这意味着它在未来的某个版本中将被删除。弃用通知旨在给开发人员提供时间来更新他们的代码,以避免在功能被删除时出现问题。
  6. Version Summary:这部分提供了新版本的概述,包括新版本中的主要更改、修复的错误数、关闭的 GitHub 问题数等。
  7. Contributors:这部分主要会列出所有对此次版本升级做出贡献的作者昵称。

主要改动

  1. 本次 pandas 2.1.0 版本开始,主要支持 Python 3.9 及以上版本,对于用于较低版本的开发者建议尽快更新
  2. pandas 3.0 版本开始会默认支持 PyArrow,即后续支持的数据类型以 PyArrow 支持的为准,此项改动将较大的提升性能
  3. 对 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([123])

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([123])

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

必须做显示的类型转换,否则就会出现警告或者报错。显示类型转换的方式可以参考主要如下:

  1. 转换为 object 类型
In [21]: ser = pd.Series([123])

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
  1. 转换为 float64 类型
In [25]: ser = pd.Series([123])

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无法对其中的具体数据类型进行优化。

参考资料

  1. 更新说明地址:https://pandas.pydata.org/docs/whatsnew/v2.1.0.html


浏览 308
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报