比较 pandas 和 Polars 的处理速度和易用性

2023-12-12 16:36

本文主要是介绍比较 pandas 和 Polars 的处理速度和易用性,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

如果使用 Python,肯定会使用的库之一就是 pandas。
这是一个优秀的库,可以轻松处理表数据,其中一个后继者的库是 Polars。

尤其是在速度方面比pandas有优势,可以看作是能够解决pandas的弱点。

这次,想测量一下 pandas 和 Polars 之间的处理速度,并验证哪一个更好,包括易用性。
最后总结以下三点:

  • 执行速度
  • library的便利
  • 可以用polar取代pandas吗?

使用的数据集

将使用 Kaggle 的 Home Credit Default Risk。 选择它是因为窃以为这是试用财务表数据的各种流程的好方法。

pandas 和 Polars 处理的比较

将用 pandas 和 Polars 来比较处理速度和编程写法。 环境是本地jupyter,所以环境的不同可能会有差异。

pip install polars pandas

import

import pandas as pd
import polars as pl

1. 加载数据

首先,尝试加载数据。 可以正常使用 read_csv 来调用两者。

# pandas
pd_application_train = pd.read_csv('./home-credit-default-risk/application_train.csv')
# 1.17s
# polars
pl_application_train = pl.read_csv('./home-credit-default-risk/application_train.csv')
# 966ms

Pandas 的处理时间为 1.17 秒,Polars 的处理时间为 966 毫秒,所以 Polars 获胜。 (约1.2倍差异)

顺便说一句,两种情况下统计数据的写入方式和第一行的写入方式是相同的。

# describe(pandas稍微快一点)
pd_application_train.describe() # 789ms
pl_application_train.describe() # 939ms# head(polars稍微快一点)
pd_application_train.head() # 151us
pl_application_train.head() # 116us

2.表格操作

从这里开始,使用基于特征工程的表操作进行各种比较。 首先,将继续进行特征工程并从其他表进行连接。

由于可以在其他表中看到过去的历史记录,所以提取 ID 的出现频率。
所以虽然处理是一样的,但这里pandas和polars的写法不一样。

# pandas
previous_loan_counts_pd = bureau_pd.groupby('SK_ID_CURR', as_index=False)['SK_ID_BUREAU'].count().rename(columns={'SK_ID_BUREAU': 'previous_loan_counts'})
# 76.3 ms

↑ 大约1.18倍的差异 ↓

# polars
previous_loan_counts_pl = (bureau_pl.groupby('SK_ID_CURR').agg(pl.col('SK_ID_BUREAU').count().alias('previous_loan_counts'))
# 90.3 ms

代码下面列出了执行时间,但 pandas 在这个过程中速度更快。

3.表连接

连接上面创建的表和加载的表。
写法略有变化。

# pandas
pd_application_train = pd.merge(pd_application_train, previous_loan_counts_pd, on='SK_ID_CURR', how='left')
# 139ms

↑ 大约4.74倍的差异 ↓

# polars
pl_application_train = pl_application_train.join(previous_loan_counts_pl,on='SK_ID_CURR',how="left"
)
# 29.3ms

Polars 在这里显然更快。
由于上述过程是用Polars重现的,因此行为是否完全相同值得商榷。

4.填写缺失值

将上面合并表中的缺失值填入 0。 在这里,两者的写法也略有不同。

# pandas
pd_application_train = pd_application_train.fillna(0)
# 557ms

↑ 大约20.3倍的差异 ↓

# polars
pl_application_train = pl_application_train.fill_null(0)
# 27.4ms

Polars 填充缺失值的速度也更快。
内部处理是否相同值得商榷,但简单的比较显示速度有相当大的差异。

顺便说一句,当删除包含缺失值的记录时,得到以下结果。

# pandas
pd_application_train.dropna(subset=["previous_loan_counts"])
# 93.5ms

↑ 大约10.2倍的差异 ↓

# polars
pl_application_train.drop_nulls(subset=["previous_loan_counts"])
# 9.13ms

使用 Matplotlib 进行可视化

还想看看数据可视化。 尝试用 Matplotlib 可视化目标变量时是否有变化,以及它的编写方式是否发生变化。

# pandas
plt.figure(figsize=(8, 5))
sns.countplot(x='TARGET', data=pd_application_train )
plt.title('Distribution of TARGET Variable')
plt.show()
# 1.07s

↑ 大约6.0倍的差距 ↓

# polars
plt.figure(figsize=(8, 5))
sns.countplot(x=pl_application_train['TARGET'].to_numpy())
plt.title('Distribution of TARGET Variable')
plt.show()
# 178ms

polar更快,但似乎需要将其转换为 numpy 一次。
这可能是速度的一个因素,但是替换时要记住的一点是可视化改变时的写入方式。
显示的数字之间没有特别的差异。
在这里插入图片描述

One-Hot Encoding

还将研究如何对特定分类数据进行 one-hot 编码的差异。 有一个名为 CODE_GENDER 的列,它用标签表示性别,因此将每个列转换为虚拟变量,并在转换后删除该列。

# pandas
gender_dummies = pd.get_dummies(pd_application_train['CODE_GENDER'])
pd_application_train = pd.concat(
[pd_application_train.drop('CODE_GENDER', axis=1), gender_dummies], axis=1)
# 119ms

↑ 大约6.18倍的差异 ↓

# polars
gender_dummies = pl_application_train.select(pl.col("CODE_GENDER")).to_dummies()
pl_application_train = pl.concat(
[pl_application_train.drop("CODE_GENDER"),gender_dummies],how="horizontal")
# 19.3ms

仍是Polar较快。 由于只对一列进行了编码,因此其编写方式没有太大差异。
然而,Polar似乎很难用一两行代码同时编码多个分类变量。
从这方面来说,pandas 更方便。

概括

正如上面提到的,将根据三点比较Pandas和Polar:

执行速度

Polar 在速度方面具有明显的优势。 看起来pandas可能在某些处理上更胜一筹,但总体来说,就简单的处理速度而言,polars更胜一筹。 如果速度对您来说很重要,那么Polars可能是个好主意。

library的便利

接下来,pandas作为library更方便。 这特别方便,因为库将为您处理许多部分,而无需您自己指定。 至于polars,有很多用pandas可以轻松完成的事情却相当麻烦,无法仅用一行代码来复制。

从代码复杂度来说,polars很多地方的写法都比较麻烦。
如果想处理相当复杂的表格,pandas 并不难,但如果想用 Polars 来做,可能会用更多的时间来搜索和调查。 因此意识到 pandas 的稳定性是因为是次研究的两种写法是不同的。

可以替换吗?

在某些情况下,可能会使用polar来加速,比如 pandas 需要很长时间处理的内容。 问题是这种更换能否顺利进行。

总而言之,看来要替换它并不容易。
首先,有一些常见的写法,但是如果过程变得有点复杂,可能很难重现pandas过程。

此外,由于版本的差异,不能像现在分享的那样写。就稳定性而言,将其融入到产品中使用时需要小心。 此外,考虑到从 pandas 重写为 Polars 所需的工作量,过程越复杂,编写代码可能花费的时间就越多。

因此,看起来首选还是 pandas。
然而,如果只做非常简单的表操作,那么使用它来提高速度似乎是划算的。

这篇关于比较 pandas 和 Polars 的处理速度和易用性的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/485263

相关文章

百度/小米/滴滴/京东,中台架构比较

小米中台建设实践 01 小米的三大中台建设:业务+数据+技术 业务中台--从业务说起 在中台建设中,需要规范化的服务接口、一致整合化的数据、容器化的技术组件以及弹性的基础设施。并结合业务情况,判定是否真的需要中台。 小米参考了业界优秀的案例包括移动中台、数据中台、业务中台、技术中台等,再结合其业务发展历程及业务现状,整理了中台架构的核心方法论,一是企业如何共享服务,二是如何为业务提供便利。

pandas数据过滤

Pandas 数据过滤方法 Pandas 提供了多种方法来过滤数据,可以根据不同的条件进行筛选。以下是一些常见的 Pandas 数据过滤方法,结合实例进行讲解,希望能帮你快速理解。 1. 基于条件筛选行 可以使用布尔索引来根据条件过滤行。 import pandas as pd# 创建示例数据data = {'Name': ['Alice', 'Bob', 'Charlie', 'Dav

关键字synchronized、volatile的比较

关键字volatile是线程同步的轻量级实现,所以volatile性能肯定比synchronized要好,并且volatile只能修饰于变量,而synchronized可以修饰方法,以及代码块。随着JDK新版本的发布,synchronized关键字的执行效率上得到很大提升,在开发中使用synchronized关键字的比率还是比较大的。多线程访问volatile不会发生阻塞,而synchronize

【Python从入门到进阶】64、Pandas如何实现数据的Concat合并

接上篇《63.Pandas如何实现数据的Merge》 上一篇我们学习了Pandas如何实现数据的Merge,本篇我们来继续学习Pandas如何实现数据的Concat合并。 一、引言 在数据处理过程中,经常需要将多个数据集合并为一个统一的数据集,以便进行进一步的分析或建模。这种需求在多种场景下都非常常见,比如合并不同来源的数据集以获取更全面的信息、将时间序列数据按时间顺序拼接起来以观察长期趋势等

stl的sort和手写快排的运行效率哪个比较高?

STL的sort必然要比你自己写的快排要快,因为你自己手写一个这么复杂的sort,那就太闲了。STL的sort是尽量让复杂度维持在O(N log N)的,因此就有了各种的Hybrid sort algorithm。 题主你提到的先quicksort到一定深度之后就转为heapsort,这种是introsort。 每种STL实现使用的算法各有不同,GNU Standard C++ Lib

研究生生涯中一些比较重要的网址

Mali GPU相关: 1.http://malideveloper.arm.com/resources/sdks/opengl-es-sdk-for-linux/ 2.http://malideveloper.arm.com/resources/tools/arm-development-studio-5/ 3.https://www.khronos.org/opengles/sdk/do

性能测试工具 wrk,ab,locust,Jmeter 压测结果比较

前言 在开发服务端软件时,经常需要进行性能测试,一般我采用手写性能测试代码的方式进行测试,那有什么现成的好的性能测试工具吗? 性能测试工具 wrk,ab,locust,Jmeter 压测结果比较 详见: 性能测试工具 wrk,ab,locust,Jmeter 压测结果比较 Jmeter性能测试 入门

MongoDB学习—(6)MongoDB的find查询比较符

首先,先通过以下函数向BookList集合中插入10000条数据 function insertN(obj,n){var i=0;while(i<n){obj.insert({id:i,name:"bookNumber"+i,publishTime:i+2000})i++;}}var BookList=db.getCollection("BookList")调用函数,这样,BookList

win7下安装Canopy(EPD) 及 Pandas进行python数据分析

先安装好canopy,具体安装版本看自己需要那种,我本来是打算安装win764位的,却发现下载总是出现错误,无奈只能下载了32位的! https://store.enthought.com/downloads/#default 安装好之后,参考如下连接,进行检验: 之后再根据下面提供的连接进行操作,一般是没问题的! http://jingyan.baidu.com/article/5d6

超声波清洗机哪个品牌比较好一点的?清洁力强的超声波清洗机品牌

随着生活水平的不断提升和幸福感的增强,珠宝、饰品和眼镜等物品已成为许多家庭的常备之物。然而,这些贵重细小的物件易于积聚微尘与隐形细菌,长此以往可能悄悄影响家人的健康,毕竟细菌是肉眼难以察觉的隐患。超声波清洗机应运而生,它以高科技手段有效地解决了这一隐忧,深层清洁,守护家人免受微小污染物的潜在威胁。不过现在市面上超声波清洗机品牌挺多的,究竟有哪些品牌的超声波清洗机比较好一点呢?接下来就为大家带来四款