1

(数据科学学习手札151)速通pandas2.0新版本干货内容 - 费弗里

 1 year ago
source link: https://www.cnblogs.com/feffery/p/17290646.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes

  大家好我是费老师,前两天pandas正式发布了其2.0.0版本,作为一次大版本更新,pandas针对底层进行了大量的重构以优化性能和稳定性,其有关这次更新内容的说明文档更是洋洋洒洒非常繁杂。

  我们作为日常使用pandas的用户,并不需要了解过多底层更新内容,只需要学习如何使用新版pandas为自己提质提效就行,今天的文章话不多说,直接带大家速通新版pandas干货内容😎。

1344061-20230405191831685-756306741.png

2 速通pandas 2.0新版本干货内容

  为了下文中方便进行演示,我们创建新的虚拟环境来测试新版pandas性能表现:

conda create -n pandas2.0-test python=3.8 -y
conda activate pandas2.0-test
pip install pandas pyarrow jupyterlab

2.1 数据读取及运算性能提升#

  我们对新版pandas的最大期待就是1个字——快,因为经过15年的发展,pandas的分析功能已经相当丰富,API语法也足够简单高效,但在处理较大型数据集时的速度和内存占用属实捉急。

  因此新版pandas引入了基于高性能运算库arrow的一系列常用数据类型,作为对默认基于numpy的数据类型的代替。

  我们测试使用到的数据集来自(https://www.kaggle.com/datasets/kartik2112/fraud-detection),针对其中的fraudTrain.csv文件进行读取,这个文件大小为三百多兆,我们分别采用3种不同的方式进行读取:

1344061-20230405191834110-752700483.png

  可以看到,新版pandas中最优的参数组合,足足比默认的参数快了将近20倍🚀,查看使用pyarrow数据类型后端读入的数据框,可以发现类型都已经切换到pyarrow的常用类型:

1344061-20230405191836197-2088949822.png

  得益于新的数据类型支持,很多常用的运算操作都要比默认情况下快上很多,其中数值型运算提升幅度很小,但是针对字符型的提升幅度相当大,如下面例子中的startswith()判断就快了接近50倍:

1344061-20230405191838126-51545097.png

2.2 “修改时复制”机制#

  “修改时复制”作为一种优化机制,在1.5版本中开始引入pandas,并在2.0中对pandas中大多数运算操作进行了支持,且很有可能在3.0版本中作为默认的策略。

  一言以蔽之,“修改时复制”机制就是一种惰性复制机制,可以帮助我们在运算过程中自动避免很多不必要的数据复制操作,下面我们来看一些例子:

  在默认情况下,如果我们像下面这样将dffield1列直接赋值给了field1,再对field1中的值进行修改,就会导致原先的df中的对应值也被修改了,这种机制本意是避免赋值时频繁的数据复制占用内存,但很容易让我们不小心篡改了原始数据:

1344061-20230405191839853-592036326.png

  而“修改时复制”机制,则会在频繁复制数据,和避免篡改数据之间进行兼顾(当前版本需要设置全局参数mode.copy_on_writeTrue以启用):

1344061-20230405191841775-1759076894.png

  也就是说,新版pandas中的“修改时复制”机制,会自动检测从源数据中衍生出的数据自身是否发生了值修改,并在修改时才进行数据复制操作,保证了分析过程的高效性和稳定性😋。

  除了上述介绍的内容外,新版pandas还进行了大量的性能优化更新,这些更新无需我们改变过去的pandas写法,而是在我们的日常使用过程中”润物细无声“地帮我们节省了计算开销,可以说,作为pandas老用户,切换到2.0版本的过程是无痛且丝滑的😀,大家可以放心地进行更新,更多更新内容细节请移步https://pandas.pydata.org/docs/whatsnew/v2.0.0.html


  以上就是本文的全部内容,欢迎在评论区与我进行讨论~


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK