pandas
pandas是基于python写的,底层的数据结构是Numpy数据(ndarray)。pandas自身有两个核心的数据结构:DataFrame和Series,前者是二维的表格数据结构,后者是一维标签化数组。
polars
polars是用Rust(一种系统级编程语言,具有非常好的并发性和性能)写的,支持Python、Rust和NodeJS。主要特性有:
- 快:Polars从零开始,没有任何扩展依赖,底层设计(import速度非常快)。
- I/O:完美支持常见的数据存储层:本地、云存储、数据库。
- 使用简单:使用它的内置操作,Polars内部决定使用最有效的方法执行。
- 核外:Polars支持使用它的streaming API操作核外数据转化。基于磁盘的内存映射技术,大数据下允许数据在磁盘和内存之间进行高效的交换。可以处理比机器可用RAM更大的数据集。
- 并行:Polars在不增加额外配置事,会充分利用机器可利用的cpu(可利用的所有核)。
- 矢量查询引擎:Polars使用Apache Arrow(一种列式数据格式,Arrow内存格式支持零拷贝读取,以实现闪电般快速的数据访问,而无需序列化开销)。以矢量的方式处理queries。它使用SIMD(单指令多数据,一种并行处理方式)优化CPU的利用。
pandas vs polars
-
性能:pandas提供了强大的数据分析功能,对处理小数据集更方便。polars利用多线程和内存映射技术,具有更快的速度,适合处理大型数据集。
-
内存使用:Pandas在加载数据时需要将其完全读入内存;polars支持streaming API操作核外数据转化,可以在处理大型数据集时降低内存使用,从而减少了内存限制。
-
数据操作:pandas具有丰富的数据操作和处理方法,使用DataFrame进行数据清洗、转换、分组、聚合等操作;Polars提供了类似于SQL的查询操作,使得对数据进行筛选、转换和聚合更加直观。
-
生态系统:pandas已经非常成熟,具有大量的学习文档、教程和扩展库;polars相对较新,对应的文档、教程等资源较少。
-
适用场景:pandas更适用于中小型数据集的数据分析和处理;polars更适用于大型数据集或追求更高性能的数据分析和处理场景。
运行时间对比
数据读取
# train.parquet: 2.35G
%time train_pd=pd.read_parquet('/Users/Downloads/archive/train.parquet') #Pandas dataframe
%time train_pl=pl.read_parquet('/Users/Downloads/archive/train.parquet') #Polars dataframe
CPU times: user 3.85 s, sys: 8.69 s, total: 12.5 s
Wall time: 10.4 s
CPU times: user 3.07 s, sys: 2.22 s, total: 5.29 s
Wall time: 3.39 s
聚合操作
%%time
# pandas query
nums = ["num_7", "num_8", "num_9", "num_10", "num_11", "num_12", "num_13", "num_14", "num_15"]
cats = ["

本文比较了基于Python的pandas库与Rust编写的高效数据处理库Polars在性能、内存使用、数据操作和适用场景等方面的特点,展示了Polars在处理大型数据集和性能上的优势。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



