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

1 简介

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

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

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种不同的方式进行读取:

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

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

2.2 “修改时复制”机制

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

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

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

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

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

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


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

(数据科学学习手札151)速通pandas2.0新版本干货内容的更多相关文章

  1. (数据科学学习手札50)基于Python的网络数据采集-selenium篇(上)

    一.简介 接着几个月之前的(数据科学学习手札31)基于Python的网络数据采集(初级篇),在那篇文章中,我们介绍了关于网络爬虫的基础知识(基本的请求库,基本的解析库,CSS,正则表达式等),在那篇文 ...

  2. (数据科学学习手札55)利用ggthemr来美化ggplot2图像

    一.简介 R中的ggplot2是一个非常强大灵活的数据可视化包,熟悉其绘图规则后便可以自由地生成各种可视化图像,但其默认的色彩和样式在很多时候难免有些过于朴素,本文将要介绍的ggthemr包专门针对原 ...

  3. (数据科学学习手札49)Scala中的模式匹配

    一.简介 Scala中的模式匹配类似Java中的switch语句,且更加稳健,本文就将针对Scala中模式匹配的一些基本实例进行介绍: 二.Scala中的模式匹配 2.1 基本格式 Scala中模式匹 ...

  4. (数据科学学习手札47)基于Python的网络数据采集实战(2)

    一.简介 马上大四了,最近在暑期实习,在数据挖掘的主业之外,也帮助同事做了很多网络数据采集的内容,接下来的数篇文章就将一一罗列出来,来续写几个月前开的这个网络数据采集实战的坑. 二.马蜂窝评论数据采集 ...

  5. (数据科学学习手札44)在Keras中训练多层感知机

    一.简介 Keras是有着自主的一套前端控制语法,后端基于tensorflow和theano的深度学习框架,因为其搭建神经网络简单快捷明了的语法风格,可以帮助使用者更快捷的搭建自己的神经网络,堪称深度 ...

  6. (数据科学学习手札42)folium进阶内容介绍

    一.简介 在上一篇(数据科学学习手札41)中我们了解了folium的基础内容,实际上folium在地理信息可视化上的真正过人之处在于其绘制图像的高度可定制化上,本文就将基于folium官方文档中的一些 ...

  7. (数据科学学习手札40)tensorflow实现LSTM时间序列预测

    一.简介 上一篇中我们较为详细地铺垫了关于RNN及其变种LSTM的一些基本知识,也提到了LSTM在时间序列预测上优越的性能,本篇就将对如何利用tensorflow,在实际时间序列预测任务中搭建模型来完 ...

  8. (数据科学学习手札36)tensorflow实现MLP

    一.简介 我们在前面的数据科学学习手札34中也介绍过,作为最典型的神经网络,多层感知机(MLP)结构简单且规则,并且在隐层设计的足够完善时,可以拟合任意连续函数,而除了利用前面介绍的sklearn.n ...

  9. (数据科学学习手札32)Python中re模块的详细介绍

    一.简介 关于正则表达式,我在前一篇(数据科学学习手札31)中已经做了详细介绍,本篇将对Python中自带模块re的常用功能进行总结: re作为Python中专为正则表达式相关功能做出支持的模块,提供 ...

  10. (数据科学学习手札69)详解pandas中的map、apply、applymap、groupby、agg

    *从本篇开始所有文章的数据和代码都已上传至我的github仓库:https://github.com/CNFeffery/DataScienceStudyNotes 一.简介 pandas提供了很多方 ...

随机推荐

  1. Ext中数据表格序号超过3位数时显示省略号

    问题 在老项目上优化时,遇到了Ext中ColumnModel序号超过3位数时,自动显示了省略号,不友好 修改方法 给RowNumberer添加样式 new Ext.grid.RowNumberer({ ...

  2. down_interruptible()获取信号量

    信号量(Semaphore)是操作系统中最典型的用于同步和互斥的手段,信号量的值可以是0.1或者n.信号量与操作系统中的经典概念PV操作对应. P(S):①将信号量S的值减1,即S=S-1:②如果S≥ ...

  3. maven远程debug

    1.修改tomcat服务器配置 打开tomcat/bin/catalina.sh 添加参数 CATALINA_OPTS="-Xdebug -Xrunjdwp:transport=dt_soc ...

  4. maven工程入门

    1. 为什么要使用maven? 毕业开始工作,项目组用的maven-spring开发的,不得不了解一下,看过很多介绍,其中maven最大的特点就是 管理jar包和版本管理 (参考:https://ww ...

  5. PS将多个图片合并成长图

    1.将所有图片拖到ps里面排好序.这里图层需要倒序,合成长图上面的图片要在图层的下面.图层倒序的方法:图层→排列→反向. 2.设置画布大小.假设18张图片,每个图片的高度是1448像素,则设置画布的高 ...

  6. Linux命令 之 contrab

    crontab 命令是用来在linux平台上执行 定时任务的命令: 默认是在安装完操作系统之后,便会启动此任务的调度 crontab 会在每分钟检查是否有要执行的任务,如果有便会执行该任务:新建的cr ...

  7. heimaJava-网络编程

    Java 网络编程 概念 网络编程可以让程序与网络上的其他设备中的程序进行数据交互 网络通信基本模式 常见的通信模式有如下两种形式,Client-Server(CS),Browser/Server(B ...

  8. drf视图类

    1 2个视图基类 # django 内置的View# drf 的APIView ,继承自View# GenericAPIView -两个重要的类属性:    queryset = Book.objec ...

  9. 关于在html中不能正确的打出字符

    由于在html中一些字符不能正确的使用,例如大于号或者小于号,浏览器在解析的过程中会将其误认为标签,那html也是非我们提供了一些预留字符,如下(部分): 1.大于号(>):&gt 2. ...

  10. nodejs 连接MSSQL数据库 Setting the TLS ServerName to an IP address is not permitted by RFC 6066. This will be ignored in a future version

    初学nodejs连接lmssql数据库,测试报错,查了很多资料,最后发现报这个错主要是mssql不支持https安全连接,如果不考虑这个,仅做测试连接,就很容易,直接改个参数就可以了: const s ...