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是一个值得考虑的选择。

相关文章
|
3月前
|
SQL 数据挖掘 关系型数据库
性能碾压pandas、polars的数据分析神器来了
性能碾压pandas、polars的数据分析神器来了
|
Rust 分布式计算 安全
Pandas 2.0正式版发布: Pandas 1.5,Polars,Pandas 2.0 速度对比测试
Pandas 2.0正式版在4月3日已经发布了,以后我们pip install默认安装的就是2.0版了,Polars 是最近比较火的一个DataFrame 库,最近在kaggle上经常使用,所以这里我们将对比下 Pandas 1.5,Polars,Pandas 2.0 。看看在速度上 Pandas 2.0有没有优势。
273 0
Pandas 2.0正式版发布: Pandas 1.5,Polars,Pandas 2.0 速度对比测试
|
机器学习/深度学习 关系型数据库 数据挖掘
Pandas 2.0 vs Polars:速度的全面对比
前几天的文章,我们已经简单的介绍过Pandas 和Polars的速度对比。刚刚发布的Pandas 2.0速度得到了显著的提升。但是本次测试发现NumPy数组上的一些基本操作仍然更快。并且Polars 0.17.0,也在上周发布,并且也提到了性能的改善,所以我们这里做一个更详细的关于速度方面的评测。
300 0
Pandas 2.0 vs Polars:速度的全面对比
|
机器学习/深度学习 存储 JSON
从Pandas快速切换到Polars :数据的ETL和查询
对于我们日常的数据清理、预处理和分析方面的大多数任务,Pandas已经绰绰有余。但是当数据量变得非常大时,它的性能开始下降。
331 0
|
SQL 分布式计算 Scala
Pandas vs Spark:获取指定列的N种方式
本篇继续Pandas与Spark常用操作对比系列,针对常用到的获取指定列的多种实现做以对比。 注:此处的Pandas特指DataFrame数据结构,Spark特指spark.sql下的DataFrame数据结构。
616 0
Pandas vs Spark:获取指定列的N种方式
|
存储 分布式计算 文字识别
Pandas vs Spark:数据读取篇
按照前文所述,本篇开始Pandas和Spark常用数据处理方法对比系列。数据处理的第一个环节当然是数据读取,所以本文就围绕两个框架常用的数据读取方法做以介绍和对比。
355 0
Pandas vs Spark:数据读取篇
|
C语言 C++ Python
pandas VS baseR
import numpy as np import pandas as pd 创建DataFrame In [2]: df = pd.DataFrame({'col_a': np.
1075 0
|
10天前
|
数据采集 存储 数据挖掘
Python数据分析:Pandas库的高效数据处理技巧
【10月更文挑战第27天】在数据分析领域,Python的Pandas库因其强大的数据处理能力而备受青睐。本文介绍了Pandas在数据导入、清洗、转换、聚合、时间序列分析和数据合并等方面的高效技巧,帮助数据分析师快速处理复杂数据集,提高工作效率。
33 0
|
2月前
|
机器学习/深度学习 数据处理 Python
从NumPy到Pandas:轻松转换Python数值库与数据处理利器
从NumPy到Pandas:轻松转换Python数值库与数据处理利器
73 0
|
11天前
|
存储 数据挖掘 数据处理
Python数据分析:Pandas库的高效数据处理技巧
【10月更文挑战第26天】Python 是数据分析领域的热门语言,Pandas 库以其高效的数据处理功能成为数据科学家的利器。本文介绍 Pandas 在数据读取、筛选、分组、转换和合并等方面的高效技巧,并通过示例代码展示其实际应用。
24 1
下一篇
无影云桌面