(数据科学学习手札151)速通pandas2.0新版本干货内容
本文示例代码已上传至我的
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版本中作为默认的策略。
一言以蔽之,“修改时复制”机制就是一种惰性复制机制,可以帮助我们在运算过程中自动避免很多不必要的数据复制操作,下面我们来看一些例子:
在默认情况下,如果我们像下面这样将df的field1列直接赋值给了field1,再对field1中的值进行修改,就会导致原先的df中的对应值也被修改了,这种机制本意是避免赋值时频繁的数据复制占用内存,但很容易让我们不小心篡改了原始数据:

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

也就是说,新版pandas中的“修改时复制”机制,会自动检测从源数据中衍生出的数据自身是否发生了值修改,并在修改时才进行数据复制操作,保证了分析过程的高效性和稳定性。
除了上述介绍的内容外,新版pandas还进行了大量的性能优化更新,这些更新无需我们改变过去的pandas写法,而是在我们的日常使用过程中”润物细无声“地帮我们节省了计算开销,可以说,作为pandas老用户,切换到2.0版本的过程是无痛且丝滑的,大家可以放心地进行更新,更多更新内容细节请移步https://pandas.pydata.org/docs/whatsnew/v2.0.0.html。
以上就是本文的全部内容,欢迎在评论区与我进行讨论~
(数据科学学习手札151)速通pandas2.0新版本干货内容的更多相关文章
- (数据科学学习手札50)基于Python的网络数据采集-selenium篇(上)
一.简介 接着几个月之前的(数据科学学习手札31)基于Python的网络数据采集(初级篇),在那篇文章中,我们介绍了关于网络爬虫的基础知识(基本的请求库,基本的解析库,CSS,正则表达式等),在那篇文 ...
- (数据科学学习手札55)利用ggthemr来美化ggplot2图像
一.简介 R中的ggplot2是一个非常强大灵活的数据可视化包,熟悉其绘图规则后便可以自由地生成各种可视化图像,但其默认的色彩和样式在很多时候难免有些过于朴素,本文将要介绍的ggthemr包专门针对原 ...
- (数据科学学习手札49)Scala中的模式匹配
一.简介 Scala中的模式匹配类似Java中的switch语句,且更加稳健,本文就将针对Scala中模式匹配的一些基本实例进行介绍: 二.Scala中的模式匹配 2.1 基本格式 Scala中模式匹 ...
- (数据科学学习手札47)基于Python的网络数据采集实战(2)
一.简介 马上大四了,最近在暑期实习,在数据挖掘的主业之外,也帮助同事做了很多网络数据采集的内容,接下来的数篇文章就将一一罗列出来,来续写几个月前开的这个网络数据采集实战的坑. 二.马蜂窝评论数据采集 ...
- (数据科学学习手札44)在Keras中训练多层感知机
一.简介 Keras是有着自主的一套前端控制语法,后端基于tensorflow和theano的深度学习框架,因为其搭建神经网络简单快捷明了的语法风格,可以帮助使用者更快捷的搭建自己的神经网络,堪称深度 ...
- (数据科学学习手札42)folium进阶内容介绍
一.简介 在上一篇(数据科学学习手札41)中我们了解了folium的基础内容,实际上folium在地理信息可视化上的真正过人之处在于其绘制图像的高度可定制化上,本文就将基于folium官方文档中的一些 ...
- (数据科学学习手札40)tensorflow实现LSTM时间序列预测
一.简介 上一篇中我们较为详细地铺垫了关于RNN及其变种LSTM的一些基本知识,也提到了LSTM在时间序列预测上优越的性能,本篇就将对如何利用tensorflow,在实际时间序列预测任务中搭建模型来完 ...
- (数据科学学习手札36)tensorflow实现MLP
一.简介 我们在前面的数据科学学习手札34中也介绍过,作为最典型的神经网络,多层感知机(MLP)结构简单且规则,并且在隐层设计的足够完善时,可以拟合任意连续函数,而除了利用前面介绍的sklearn.n ...
- (数据科学学习手札32)Python中re模块的详细介绍
一.简介 关于正则表达式,我在前一篇(数据科学学习手札31)中已经做了详细介绍,本篇将对Python中自带模块re的常用功能进行总结: re作为Python中专为正则表达式相关功能做出支持的模块,提供 ...
- (数据科学学习手札69)详解pandas中的map、apply、applymap、groupby、agg
*从本篇开始所有文章的数据和代码都已上传至我的github仓库:https://github.com/CNFeffery/DataScienceStudyNotes 一.简介 pandas提供了很多方 ...
随机推荐
- JAVA基础Day3-用户交互Scanner/顺序结构/选择结构/循环结构
一.用户交互Scanner JAVA提供了一个工具类,可以用来获取用户的输入. java.util.Scanner是Java5的新特征,可以通过Scanner类来获取用户的输入. 基本语法: Scan ...
- vue+element 表格动态列添加点击事件与排序(/或者空值排最后)
<template> <div> <el-table ref="tableData" :data="tableData& ...
- JXS的基本使用
1.导入react和react-dom两个包 import React from 'react' import ReactDOM from 'react-dom' 2使用JSX创建react元素 3. ...
- EF OwnsOne 主键不自增
menu public class Menu { /// <summary> /// id /// </summary> [Key, DatabaseGeneratedAttr ...
- MySQL_20200417
MySQL安装与卸载 SQL语句与Oracle大致相同 主要使用 Navicat for MySQL进行数据库操作 MySQL常用的命令: 登录:mysql -uroot -p /mysql -ur ...
- 北京金橙子ezcad2和lmc1控制卡二次开发的动态连接库手册
我要吐槽一下金橙子打电话过去一问三不答.要个手册2.0的不给,只给3.0的.而且态度角度***钻,想尽一切办法让你自己用不了.我又不是要做打标卡,只是做个二次开发.有必要这样吗?反正我是不会推荐用户再 ...
- 转 oracle 无法使用sys用户登录 connection as SYS should be as SYSDBA OR SYSOPER
转自: https://blog.csdn.net/u012004128/article/details/80781979 安装Oracle11g后,为了测试安装是否成功,通过cmd命令打开了sql ...
- @DeclareParents声明对象的AOP
今天在使用@DeclareParents时,使用AspectJ拓展对象的接口 public interface Encoreable { void nextPerformance(); } @Comp ...
- circos plot in R
FIN=read.table(IN,header=TRUE) circos.clear() circos.par("start.degree" = 90) circos.initi ...
- 错误小记录: python取余操作
-23 % 3 >>>1 23%-3 >>>-1 -23%-3 >>>-2 在计算机语言中,同号的整数运算,所有语言都遵循尽量让商小的原则,所以 ...