数据学习
登录
注册
原创博客
期刊会议
学术世界
期刊出版社
领域期刊
SCI/SCIE/SSCI/EI简介
期刊列表
会议列表
所有期刊分区
学术期刊信息检索
JCR期刊分区查询
CiteScore期刊分区查询
中科院期刊分区查询
领域期刊分区
管理 - UTD24期刊列表
管理 - AJG(ABS)期刊星级查询
管理 - FMS推荐期刊列表
计算机 - CCF推荐期刊会议列表
高校期刊分区
南大核心(CSSCI)
合工大小核心
合工大大核心
AI资源仓库
AI领域与任务
AI研究机构
AI学术期刊
AI论文快讯
AI数据集
AI开源工具
AI模型
AI模型概览
预训练模型
数据推荐
网址导航
我的网址导航
程序员必备网站
重磅!Pandas2.0发布!更快的速度更低的内存占用!
标签:
#pandas#
#编程工具#
时间:2023/03/13 22:44:33
作者:小木
Pandas是Python领域的事实数据库,配合NumPy、Scikit-Learn使用,几乎统治了所有需要做数据处理和机器学习的人。而上个月,Pandas2.0宣布将在3月发布。这个重大的更新版本,距离1.5.3的发布仅仅只有2个月。本篇博客将前瞻这个工具的2.0新特性!它最主要增强的能力就是提高处理速度,降低运行内存。

#### 一、更快的速度和更低的内存占用! 2.0的Pandas添加了对PyArrow的支持。在此之前,Pandas处理最多的数据应该是csv文件,但是这种文本文件的读写性能和内存占用比较高。虽然易于人的理解,但是对于机器处理并不好。而Parquet是一种二进制的数据格式,虽然无法被直接打开,但是对于计算机来说,处理起来飞快。 此前,Pandas也支持对parquet的文件的处理,但是需要安装相关的库,并指定处理引擎。而2.0的Pandas将使用PyArrow作为默认的parquet文件处理引擎。 Pyarrow是一个提供列式内存格式的库,它是一种组织数据的方式,使其更容易被读取和并行处理。

选择PyArrow的理由有几个: **缺失值处理** 缺失值的处理是非常复杂的任务,对于相同类型的数据,如果采用特殊的如None或者NaN表示缺失值,其实是会降低它的性能的。Apache Arrow内存数据表示法包括一个等价的表示法作为其规范的一部分。通过使用Arrow,pandas能够处理缺失值,而不需要为每种数据类型实现自己的版本。 **性能** 有许多操作都可以用数据帧来完成。而每一种情况都需要自己的分析,但一般来说,我们可以认为Arrow的实现能够更快地进行操作。一些例子,在我的笔记本电脑中使用一个有250万行的数据框架。 |Operation|Time with NumPy|Time with Arrow|Speed up | ------------ | ------------ | ------------ | ------------ | |read parquet (50Mb)|141 ms|87 ms|1.6x |mean (int64)|2.03 ms|1.11 ms|1.8x |mean (float64)|3.56 ms|1.73 ms|2.1x |endswith (string)|471 ms|14.9 ms|31.6x **互操作性** CSV是一种不同项目都能理解的文件格式(pandas、R、Excel等),Arrow也是一种独立于程序的格式。所以可以被其他程序访问。 总之,在pandas 2.0中使用pyarrow后端可以使数据操作更快,内存效率更高,特别是在处理大型数据集时。 #### 二、写入时复制(Copy-on-Write)的优化 这是一种类似于Spark和它执行代码的方式。这是一种内存优化技术,在pandas中用来提高性能,减少处理大数据集时的内存使用。 其原理是,当你复制一个pandas对象,如DataFrame或Series,而不是立即创建一个新的数据副本,pandas将创建一个对原始数据的引用,推迟创建一个新的副本,直到你以某种方式修改数据。 这意味着,如果你有相同数据的多个副本,它们都可以引用相同的内存,直到你对其中一个进行修改。这可以大大减少内存的使用,提高性能,因为你不需要对数据进行不必要的复制。 总的来说,写时拷贝是一种强大的优化技术,可以帮助你更有效地处理大型数据集,并减少内存。 #### 三、索引现在可以容纳NumPy的数字类型了 快速总结:更好的索引,更快的访问和计算方式 详细信息。 Pandas 2.0允许Index持有任何NumPy的数字类型,包括int8, int16, int32, int64, uint8, uint16, uint32, uint64, float32, 和 float64。 以前,只有int64、uint64和float64类型被支持。 因此,以前创建64位索引的操作现在可以创建较低位数的索引,如32位索引。
相关博客
最热博客