polars

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Polars Fast DataFrame Library

Polars 快速DataFrame库

Lightning-fast DataFrame library with lazy evaluation and parallel execution.
具备延迟计算和并行执行能力的超高速DataFrame库。

When to Use

适用场景

  • Pandas is too slow for your dataset
  • Working with 1-100GB datasets that fit in RAM
  • Need lazy evaluation for query optimization
  • Building ETL pipelines
  • Want parallel execution without extra config

  • Pandas处理你的数据集速度过慢
  • 处理1-100GB且可放入内存的数据集
  • 需要通过延迟计算优化查询
  • 构建ETL管道
  • 无需额外配置即可实现并行执行

Lazy vs Eager Evaluation

延迟计算 vs 即时计算

ModeFunctionExecutesUse Case
Eager
read_csv()
ImmediatelySmall data, exploration
Lazy
scan_csv()
On
.collect()
Large data, pipelines
Key concept: Lazy mode builds a query plan that gets optimized before execution. The optimizer applies predicate pushdown (filter early) and projection pushdown (select columns early).

模式函数执行时机适用场景
即时
read_csv()
立即执行小型数据、数据探索
延迟
scan_csv()
调用
.collect()
时执行
大型数据、数据管道
核心概念:延迟模式会先构建查询计划,在执行前完成优化。优化器会应用谓词下推(提前过滤)和投影下推(提前选择列)。

Core Operations

核心操作

Data Selection

数据选择

OperationPurpose
select()
Choose columns
filter()
Choose rows by condition
with_columns()
Add/modify columns
drop()
Remove columns
head(n)
/
tail(n)
First/last n rows
操作用途
select()
选择列
filter()
按条件筛选行
with_columns()
添加/修改列
drop()
删除列
head(n)
/
tail(n)
获取前n行/后n行

Aggregation

聚合操作

OperationPurpose
group_by().agg()
Group and aggregate
pivot()
Reshape wide
melt()
Reshape long
unique()
Distinct values
操作用途
group_by().agg()
分组并聚合
pivot()
宽表转换
melt()
长表转换
unique()
获取去重值

Joins

连接操作

Join TypeDescription
innerMatching rows only
leftAll left + matching right
outerAll rows from both
crossCartesian product
semiLeft rows with match
antiLeft rows without match

连接类型说明
inner仅保留匹配的行
left保留左表所有行及右表匹配行
outer保留两张表的所有行
cross笛卡尔积连接
semi保留左表中存在匹配的行
anti保留左表中无匹配的行

Expression API

表达式API

Key concept: Polars uses expressions (
pl.col()
) instead of indexing. Expressions are lazily evaluated and optimized.
核心概念:Polars使用表达式(
pl.col()
)而非索引方式。表达式会延迟计算并进行优化。

Common Expressions

常用表达式

ExpressionPurpose
pl.col("name")
Reference column
pl.lit(value)
Literal value
pl.all()
All columns
pl.exclude(...)
All except
表达式用途
pl.col("name")
引用列
pl.lit(value)
字面量值
pl.all()
所有列
pl.exclude(...)
排除指定列外的所有列

Expression Methods

表达式方法

CategoryMethods
Aggregation
.sum()
,
.mean()
,
.min()
,
.max()
,
.count()
String
.str.contains()
,
.str.replace()
,
.str.to_lowercase()
DateTime
.dt.year()
,
.dt.month()
,
.dt.day()
Conditional
.when().then().otherwise()
Window
.over()
,
.rolling_mean()
,
.shift()

类别方法
聚合
.sum()
,
.mean()
,
.min()
,
.max()
,
.count()
字符串
.str.contains()
,
.str.replace()
,
.str.to_lowercase()
日期时间
.dt.year()
,
.dt.month()
,
.dt.day()
条件判断
.when().then().otherwise()
窗口函数
.over()
,
.rolling_mean()
,
.shift()

Pandas Migration

Pandas迁移指南

PandasPolars
df['col']
df.select('col')
df[df['col'] > 5]
df.filter(pl.col('col') > 5)
df['new'] = df['col'] * 2
df.with_columns((pl.col('col') * 2).alias('new'))
df.groupby('col').mean()
df.group_by('col').agg(pl.all().mean())
df.apply(func)
df.map_rows(func)
(avoid if possible)
Key concept: Polars prefers explicit operations over implicit indexing. Use
.alias()
to name computed columns.

PandasPolars
df['col']
df.select('col')
df[df['col'] > 5]
df.filter(pl.col('col') > 5)
df['new'] = df['col'] * 2
df.with_columns((pl.col('col') * 2).alias('new'))
df.groupby('col').mean()
df.group_by('col').agg(pl.all().mean())
df.apply(func)
df.map_rows(func)
(尽可能避免使用)
核心概念:Polars更倾向于显式操作而非隐式索引。使用
.alias()
为计算列命名。

File I/O

文件读写

FormatReadWriteNotes
CSV
read_csv()
/
scan_csv()
write_csv()
Human readable
Parquet
read_parquet()
/
scan_parquet()
write_parquet()
Fast, compressed
JSON
read_json()
/
scan_ndjson()
write_json()
Newline-delimited
IPC/Arrow
read_ipc()
/
scan_ipc()
write_ipc()
Zero-copy
Key concept: Use Parquet for performance. Use
scan_*
for large files to enable lazy optimization.

格式读取写入说明
CSV
read_csv()
/
scan_csv()
write_csv()
人类可读
Parquet
read_parquet()
/
scan_parquet()
write_parquet()
高速、压缩存储
JSON
read_json()
/
scan_ndjson()
write_json()
换行分隔格式
IPC/Arrow
read_ipc()
/
scan_ipc()
write_ipc()
零拷贝
核心概念:追求性能时使用Parquet格式。处理大文件时使用
scan_*
方法以启用延迟优化。

Performance Tips

性能优化技巧

TipWhy
Use lazy modeQuery optimization
Use ParquetColumn-oriented, compressed
Select columns earlyProjection pushdown
Filter earlyPredicate pushdown
Avoid Python UDFsBreaks parallelism
Use expressionsVectorized operations
Set dtypes on readAvoid inference overhead

技巧原因
使用延迟模式实现查询优化
使用Parquet格式列存储、压缩特性
提前选择列投影下推优化
提前过滤数据谓词下推优化
避免Python自定义函数(UDF)会破坏并行执行
使用表达式矢量化操作
读取时指定数据类型避免类型推断开销

vs Alternatives

与其他工具对比

ToolBest ForLimitations
Polars1-100GB, speed criticalMust fit in RAM
PandasSmall data, ecosystemSlow, memory hungry
DaskLarger than RAMMore complex API
SparkCluster computingInfrastructure overhead
DuckDBSQL interfaceDifferent API style
工具最佳适用场景局限性
Polars1-100GB数据集、对速度要求高数据必须可放入内存
Pandas小型数据、生态完善速度慢、内存占用高
Dask超出内存的数据集API复杂度更高
Spark集群计算基础设施开销大
DuckDBSQL接口需求API风格差异大

Resources

参考资源