本文示例代码已上传至我的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. lua按某些键排序的方法

    function sort(list, ...) local opts = {...}; local len = #opts; return table.sort(list, function(a, ...

  2. 132pattern-Leetcode456

    QUESTION: To search for a subsequence (s1,s2,s3) such that s1 < s3 < s2. INTUITION: Suppose we ...

  3. 阿里云下载ssl证书

    "request合法域名"跟上面CA证书中申请的二级域名一致. Springboot增加证书 创建Springboot项目. 解压缩后,证书文件4375838_wechat.abc ...

  4. Vue二级联动上传图片

    二级联动的后台和之前一样都需要一个字典字段查询来实现二级联动 但是由于VUE语法和AJAX的不同在前台绑定的时候也有所不同 2.1 首先下拉框的写法就有了本质的改变通过v-model="&q ...

  5. shell typeset 命令使用修改大小写

    typeset的-u选项可以将一个变量的字符变成大写 1 /home/lee#typeset -u var=abc 2 /home/lee#echo $var 3 ABC -l选项将一个变量的字符变成 ...

  6. 微信内置浏览器的JsAPI(WeixinJSBridge)

    参考: https://www.baidufe.com/item/f07a3be0b23b4c9606bb.html https://github.com/zxlie/WeixinApi

  7. mac 安装go语言以及配置环境变量

    Go官网下载地址:https://golang.org/dl/ Go官方镜像站(推荐):https://golang.google.cn/dl/ 其他版本自己根据系统版本下载,这里只介绍mac下载 一 ...

  8. 狂神的学习笔记demo04

    package com.company; public class demo04 { public static void main(String[] args){ int i=10;//二进制 in ...

  9. maven本地仓库有相应的依赖,依旧会从远程仓库拉取问题的原因及解决

    请打开你自己的本地仓库,对应依赖路径下的_remote.repositories文件.如果是从远程仓库拉取的,这里一般是显示这个: junit-4.12.jar>alimaven= junit- ...

  10. Servlet(三)

    dom4j 元素对象获取指定子元素  element("名字") ServletConfig: 1.在Servlet运行时,需要获取servlet的配置信息 可以使用servlet ...