Pandas VS Polars:迅如闪电的全新体验

简介: Pandas VS Polars:迅如闪电的全新体验

前期,我们简单介绍过关于Polars的相关情况,详见Polars库:数据分析的新星,性能与易用性的完美结合。本期,我们通过具体的例子来对比一下Pandas和Polars这两个Python库,来见识一下Polars的强大。一、测试数据生成代码首先,我用python构建了一个1千万行的数据集(csv文件大概接近900M),具体代码为:


import pandas as pdimport polars as plimport numpy as np
def create_dataframe(n_rows, library):      if library == 'pandas':            data = { 'name': np.random.choice(['Alice', 'Bob', 'Charlie', 'David', 'Eva'], n_rows),                'age': np.random.randint(18, 65, size=n_rows),                 'city': np.random.choice(['New York', 'San Francisco', 'Los Angeles'], n_rows),                 'income': np.random.normal(50000, 10000, size=n_rows),                'gender': np.random.choice(['Male', 'Female'], n_rows),                'is_married': np.random.choice([True, False], n_rows),                'children': np.random.randint(0, 5, size=n_rows),                'zip_code': np.random.randint(10000, 99999, size=n_rows),                'interest_rate': np.random.uniform(0, 0.1, size=n_rows),                 'is_default': np.random.choice([True, False], n_rows)               }            return pd.DataFrame(data)    elif library == 'polars':         data = {             'name': np.random.choice(['Alice', 'Bob', 'Charlie', 'David', 'Eva'], n_rows).astype('str'),            'age': np.random.randint(18, 65, size=n_rows).astype('int'),            'city': np.random.choice(['New York', 'San Francisco', 'Los Angeles'], n_rows).astype('str'),            'income': np.random.normal(50000, 10000, size=n_rows).astype('float'),             'gender': np.random.choice(['Male', 'Female'], n_rows).astype('str'),             'is_married': np.random.choice([True, False], n_rows).astype('bool'),            'children': np.random.randint(0, 5, size=n_rows).astype('int'),             'zip_code': np.random.randint(10000, 99999, size=n_rows).astype('str'),            'interest_rate': np.random.uniform(0, 0.1, size=n_rows).astype('float'),            'is_default': np.random.choice([True, False], n_rows).astype('bool')        }         return pl.DataFrame(data)

e8425c2884c1e03004e45b6b01a92971.png

二、测试生成数据能力1. Pandas


%%timedata1=create_dataframe(10000000,'pandas')

Wall time: 9.65 s

2. Polars


%%timedata2=create_dataframe(10000000,'polars')

Wall time: 24.2 s

在生成数据能力方面,Pandas的数据生成速度要快于Polars。

三、测试保存、读取、筛选、分类、排序能力

1. 保存数据对比(to_csv)


%%time#pandasdata1.to_csv('1.csv')

Wall time: 52 s


%%time#polarsdata2.write_csv('2.csv')

Wall time: 6.64 s2. 读取数据对比(read_csv)


%%time#pandasdatar1=pd.read_csv('1.csv')

Wall time: 7.5 s


%%time#polarsdatar1=pl.read_csv('1.csv')

Wall time: 1.63 s

3. 筛选数据对比(Filter)


%%time#pandasdata1[data1['name']=='Eva']

Wall time: 5.25 s

6c5fba5ddb93df4e87ac8fc7b4f0a094.png


%%time#polarsdatar1.filter(pl.col('name')=='Eva')

Wall time: 1.4 s

ccca9ec02b0ea2f01fd2fc535da82ac7.png

4. 分类对比(Groupby)



%%time#pandasdata1.groupby('name').apply(lambda x:x[:])

Wall time: 14.4 s

9d446285a16d95805bb7c3ab019ddee7.png


%%time#polarsdatar1.group_by('name').apply(lambda x:x[:])

Wall time: 5.49 s

b9b2bc5415d49f8bdfd3448f4b1dc014.png


5. 排序对比(Sort)


%%time#pandasdata1.sort_values(by="name",ascending=True)

Wall time: 20.1 s

f854d0ab4c38b2ce062813b1673a2f4e.png


%%time#polarsdatar1.sort(by="name",descending=False)

Wall time: 1.7 s

471ce2e6631cbf912ba3a309a762739d.png

综上,我们可以看到在保存、读取、筛选、分类、排序这5项能力对比中,Polars的速度都远超Pandas,迅如闪电。

四、Matplotlib画图对比一下


import matplotlib.pyplot as pltimport numpy as np
# 两组数据pandas1 = [9.65, 52, 7.5, 5.25,14.4,20.1]polars1 = [24.2, 6.64, 1.63, 1.4,5.49,1.7]
# 通用 x 轴位置x_positions = np.arange(len(pandas1))
# 增加柱状图宽度以区分数据组bar_width = 0.35
# 创建图表和轴fig, ax = plt.subplots(figsize=(10, 6))
# 绘制第一组数据的柱状图ax.bar(x_positions, pandas1, bar_width, label='Pandas', color='g', edgecolor='black')
# 绘制第二组数据的柱状图,稍微向右偏移ax.bar(x_positions+ bar_width,polars1, bar_width, label='Polars', color='r', edgecolor='black')
# 设置 x 轴标签ax.set_xticks(x_positions + bar_width / 2)ax.set_xticklabels(['Create', 'Save', 'Read', 'Filter','Groupby','Sort'])
# 设置 y 轴标签和标题ax.set_xlabel('Items')ax.set_ylabel('Time(s)')ax.set_title('Pandas vs Polars')
# 显示图例ax.legend()
# 显示图表plt.show()


9647dc1863f20709330e5e30ebce88b2.png


五、结语综上,在Python数据处理领域,虽然Pandas因其易用性和灵活性,在数据探索和原型设计阶段仍然非常受欢迎,但Polars凭借其出色的性能、高效的内存使用和强大的并行处理能力,在处理大规模数据集方面展现出了明显的优势。因此,对于需要处理大量数据的应用场景,Polars是一个值得考虑的选择。

相关文章
|
11天前
|
弹性计算 人工智能 架构师
阿里云携手Altair共拓云上工业仿真新机遇
2024年9月12日,「2024 Altair 技术大会杭州站」成功召开,阿里云弹性计算产品运营与生态负责人何川,与Altair中国技术总监赵阳在会上联合发布了最新的“云上CAE一体机”。
阿里云携手Altair共拓云上工业仿真新机遇
|
7天前
|
机器学习/深度学习 算法 大数据
【BetterBench博士】2024 “华为杯”第二十一届中国研究生数学建模竞赛 选题分析
2024“华为杯”数学建模竞赛,对ABCDEF每个题进行详细的分析,涵盖风电场功率优化、WLAN网络吞吐量、磁性元件损耗建模、地理环境问题、高速公路应急车道启用和X射线脉冲星建模等多领域问题,解析了问题类型、专业和技能的需要。
2513 17
【BetterBench博士】2024 “华为杯”第二十一届中国研究生数学建模竞赛 选题分析
|
7天前
|
机器学习/深度学习 算法 数据可视化
【BetterBench博士】2024年中国研究生数学建模竞赛 C题:数据驱动下磁性元件的磁芯损耗建模 问题分析、数学模型、python 代码
2024年中国研究生数学建模竞赛C题聚焦磁性元件磁芯损耗建模。题目背景介绍了电能变换技术的发展与应用,强调磁性元件在功率变换器中的重要性。磁芯损耗受多种因素影响,现有模型难以精确预测。题目要求通过数据分析建立高精度磁芯损耗模型。具体任务包括励磁波形分类、修正斯坦麦茨方程、分析影响因素、构建预测模型及优化设计条件。涉及数据预处理、特征提取、机器学习及优化算法等技术。适合电气、材料、计算机等多个专业学生参与。
1520 14
【BetterBench博士】2024年中国研究生数学建模竞赛 C题:数据驱动下磁性元件的磁芯损耗建模 问题分析、数学模型、python 代码
|
3天前
|
存储 关系型数据库 分布式数据库
GraphRAG:基于PolarDB+通义千问+LangChain的知识图谱+大模型最佳实践
本文介绍了如何使用PolarDB、通义千问和LangChain搭建GraphRAG系统,结合知识图谱和向量检索提升问答质量。通过实例展示了单独使用向量检索和图检索的局限性,并通过图+向量联合搜索增强了问答准确性。PolarDB支持AGE图引擎和pgvector插件,实现图数据和向量数据的统一存储与检索,提升了RAG系统的性能和效果。
|
9天前
|
编解码 JSON 自然语言处理
通义千问重磅开源Qwen2.5,性能超越Llama
击败Meta,阿里Qwen2.5再登全球开源大模型王座
552 14
|
1月前
|
运维 Cloud Native Devops
一线实战:运维人少,我们从 0 到 1 实践 DevOps 和云原生
上海经证科技有限公司为有效推进软件项目管理和开发工作,选择了阿里云云效作为 DevOps 解决方案。通过云效,实现了从 0 开始,到现在近百个微服务、数百条流水线与应用交付的全面覆盖,有效支撑了敏捷开发流程。
19282 30
|
9天前
|
人工智能 自动驾驶 机器人
吴泳铭:AI最大的想象力不在手机屏幕,而是改变物理世界
过去22个月,AI发展速度超过任何历史时期,但我们依然还处于AGI变革的早期。生成式AI最大的想象力,绝不是在手机屏幕上做一两个新的超级app,而是接管数字世界,改变物理世界。
469 48
吴泳铭:AI最大的想象力不在手机屏幕,而是改变物理世界
|
1月前
|
人工智能 自然语言处理 搜索推荐
阿里云Elasticsearch AI搜索实践
本文介绍了阿里云 Elasticsearch 在AI 搜索方面的技术实践与探索。
18838 20
|
1月前
|
Rust Apache 对象存储
Apache Paimon V0.9最新进展
Apache Paimon V0.9 版本即将发布,此版本带来了多项新特性并解决了关键挑战。Paimon自2022年从Flink社区诞生以来迅速成长,已成为Apache顶级项目,并广泛应用于阿里集团内外的多家企业。
17528 13
Apache Paimon V0.9最新进展
|
2天前
|
云安全 存储 运维
叮咚!您有一份六大必做安全操作清单,请查收
云安全态势管理(CSPM)开启免费试用
362 4
叮咚!您有一份六大必做安全操作清单,请查收