数据分析工具之-Polars
· 3 min read
在此前的官网和 APP 数据分析工作中,一直使用 Pandas 这个老牌的工具。但遇到一些问题,比如针对大数据集预处理时速度慢,内存占用大。速度慢可以通过多线程处理去解决,但这样就需要分块处理,或使用 dask 等中间层,内存占用在 Pandas 的前提下,暂时无解。
由于存在上述问题,准备在业务数据分析时引入 Polars,更好利用起来目前有限的 CPU 和内存资源。
Polars 简介
Polars is a blazingly fast DataFrame library for manipulating structured data. The core is written in Rust, and available for Python, R and NodeJS.
Polars 的特性有:
- 快,非常快,可以实际验证相同数据集相同操作下二者的处理速度差异。
- 对许多不同数据源都提供完善支持:包括但不限本地数据、云存储、数据库。
- 用户友好的 API
- 流式 API 按需加载,内存利用率高
- 并行处理,无需任何额外配置
- 矢量查询引擎
它提供了针对 Python, R, Rust 等语言的 API.
且 Polars 的 DataFrame 概念和 Pandas 互通, 有提供 API 可以将 Pandas DataFrame 和 Polars DataFrame 间进行转换。
Polars Expression
Expressions
是 Polars 的核心概念. 它提供一种模块化的结构来将简单查询组合成复杂查询.
如下是四个基础表达式构造块:
-
select: 用于选择 DF 中的列, 比如
df.select(pl.col("*"))
或df.select(pl.col("a", "b"))
-
filter: 用于过滤 DF 来创建一个它的子集, 比如
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: 用于创建新的 Column
df.with_columns(pl.col("b").sum().alias("e"), (pl.col("b") + 42).alias("b+42"))
-
group_by: 用于根据指定条件对 DF 进行分组.
df2.group_by("y", maintain_order=True).len()
合并多个 DataFrame
合并时有两种:
- 横向: join
- 纵向: concate
其他相关内容详见官方文档.