超越Pandas:数据处理利器Polars的快速入门指南

![[Polars-20240329181348570.webp]]

简介

Polars是一个用于数据处理和分析的快速、内存高效的Rust语言编写的数据操作库。它提供了类似于Pandas的API,但具有更好的性能和内存使用效率。本文将介绍Polars库的基本使用说明,并通过具体的代码案例展示其功能和特性。

Polas的优势

在这里插入图片描述

快速:Polars自诞生之初便聚焦于性能优化。它采用了Rust编写的多线程查询引擎,确保出色的并行处理效率。同时,其矢量化与列式处理方式,在现代处理器上实现了缓存一致性算法(Cache-Coherent Algorithms),从而实现了卓越的性能表现。

简单:Polars的表达式直观易懂,不仅高效而且可读性强。
对于熟悉数据处理的人而言,使用Polars将感觉非常顺畅,哪怕是初学者也能快速上手。

开源:Polars是开源的,而且将始终保持开源。在积极的开发者社区推动下,鼓励每个人添加新功能并贡献自己的力量。Polars在MIT许可下免费使用。

与pandas相比,Polars可以实现超过30倍的性能提升。

![[Polars-20240329181322958.webp]]

代码操作详解

安装Polars

首先,我们需要安装Polars库。你可以通过以下命令使用pip安装Polars:

pip install polars

读取与写入

Polars支持常见文件格式(例如csv、json、parquet)、云存储(S3、Azure Blob、BigQuery)和数据库(例如postgres、mysql)的读取和写入。下面我们展示了读取和写入到磁盘的概念。

import polars as pl 
from datetime import datetime 

df = pl.DataFrame(
	{ 
				  "integer": [1, 2, 3], 
				  "date": [ 
					  datetime(2025, 1, 1), 
					  datetime(2025, 1, 2), 
					  datetime(2025, 1, 3), 
				  ], 
				  "float": [4.0, 5.0, 6.0], 
				  "string": ["a", "b", "c"], 
	} 
) 

print(df)

csv

# 从CSV文件加载数据
df = pl.read_csv('data.csv')

# 保存DataFrame到CSV文件
df.write_csv('output.csv')

Parquet

df = pl.read_parquet("docs/data/path.parquet")

df = pl.DataFrame({"foo": [1, 2, 3], "bar": [None, "bak", "baz"]}) df.write_parquet("docs/data/path.parquet")

df = pl.scan_parquet("docs/data/path.parquet")

IO - Polars user guide

数据处理

选择

可以使用类似于Pandas的语法选择和过滤数据。

# 选择特定列
df.select(pl.col("*"))

# 根据条件过滤数据
df.select(pl.col("a", "b"))

Basic operators - Polars user guide
Column selections - Polars user guide

筛选

df.filter( pl.col("c").is_between(datetime(2025, 12, 2), datetime(2025, 12, 3)), )、

df.filter((pl.col("a") <= 3) & (pl.col("d").is_not_nan()))

增加列

with_columns用于创建新的列。我们创建了两个新列e和b+42。首先,我们将列b中的所有值相加,并将结果存储在列e中。然后,我们将42加到列b的值上,创建一个新列b+42来存储这些结果。

df.with_columns(pl.col("b").sum().alias("e"), (pl.col("b") + 42).alias("b+42"))

数据合并分组

分组

# 创建DataFrame
df2 = pl.DataFrame( { "x": range(8), 
					 "y": ["A", "A", "A", "B", "B", "C", "X", "X"], } )

![[Polars-20240329180644004.webp]]

df2.group_by("y", maintain_order=True).len()

![[Polars-20240329180648904.webp]]

df2.group_by("y", maintain_order=True).agg( pl.col("*").count().alias("count"), pl.col("*").sum().alias("sum"), )

![[Polars-20240329180658397.webp]]

Join


df = pl.DataFrame({"a": range(8), 
				   "b": np.random.rand(8),
				   "d": [1, 2.0, float("nan"), float("nan"), 0, -5, -42, None]}) 

df2 = pl.DataFrame({"x": range(8), 
					"y": ["A", "A", "A", "B", "B", "C", "X", "X"]}) 
					
joined = df.join(df2, left_on="a", right_on="x") 

print(joined)

Joins - Polars user guide

concat


stacked = df.hstack(df2) print(stacked)

结语

通过本文的介绍,你现在应该对Polars库有了一个基本的了解,并且知道如何使用它进行数据处理和分析。Polars提供了丰富的功能和高性能,使得数据科学家和工程师能够更加高效地处理大规模数据集。如果你对Polars感兴趣,可以进一步阅读官方文档以深入了解其更多功能和特性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值