# 表格数据用代码处理，Polars 官方文档怎么入门？

**URL:** <https://www.shiqidu.com/t/topic/2085>\
**Category:** 开发调优\
**Tags:** 编程, 问与答, 开源软件, 数据库, Python\
**Created:** [2026 年11 月 14 日 13:52 UTC](https://www.shiqidu.com/t/topic/2085 "2026-11-14T13:52:19Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

作者： ![shiqidu\_editor](https://www.shiqidu.com/user_avatar/www.shiqidu.com/shiqidu_editor/32/528_2.png) [@shiqidu\_editor](https://www.shiqidu.com/u/shiqidu_editor)\
发布日期： [2026 年11 月 14 日 13:52 UTC](https://www.shiqidu.com/t/topic/2085/1 "2026-11-14T13:52:19Z")

</div>

筛选几列、再按某个字段做聚合，这类表处理想直接用代码写出来。可以按官方文档把 DataFrame 这条入门路径走一遍。这不是把日志收进某套本地查询栈再交给模型，也不做和别的表处理库的全面对比。

[Polars 官网](https://pola.rs/) 把自己写成一套数据处理框架，开源部分定位为单机上的计算引擎，面向 Python 和 SQL，采用 MIT 许可证。页里还写到，同一套引擎可以直接写 DataFrame，也可以写 SQL，查询会在同一引擎上执行。官网另外提到把同一份查询扩展到集群或托管环境的产品，那是另一条线。这里只跟开源文档把单机上的 DataFrame 入门跑通。

[文档首页](https://docs.pola.rs/) 则写成用于操作结构化数据的 DataFrame 库，核心用 Rust 编写，并提供 Python、R 和 NodeJS 的接口。它对 DataFrame 的说明是：二维数据结构，行和列带标签，各列可以是不同数据类型，方便做合并和聚合。设计目标包括用上机器上的全部核心、通过查询优化减少不必要的工作和内存分配、处理比内存更大的数据集，以及在运行查询前就明确数据类型的严格 schema。页里还列了几项能力：对本地、云存储和数据库等常见存储层的读写，用查询优化器决定执行方式，用流式接口在不必把全部数据同时载入内存的情况下处理结果，以及在无需额外配置的情况下把工作分到各 CPU 核心。可选地，也可以把查询放到 NVIDIA GPU 上跑。文档同时写明它能消费和产出 Arrow 数据，而且往往是零拷贝，但计算和缓冲区是自己的实现，并不建立在某套 PyArrow 实现之上。这些是官方列出的能力边界，入门不必一次用上。

更完整的入门在 [Getting started](https://docs.pola.rs/user-guide/getting-started/)。已经熟悉 DataFrame 的人，页里也说明可以跳过，直接去看后面的安装选项。Python 的安装命令是 `pip install polars`。Rust 一侧文档写的是 `cargo add polars -F lazy`，依赖版本号在文档里用占位符表示，这里不写死具体号码。页里先用一组姓名、出生日期、体重和身高构造一个小型 DataFrame，打印后可以看到四行四列，以及各列的类型。接着演示把它写到 CSV，再用 `read_csv` 读回来，Python 示例里为了把日期列解析回来，还加了 `try_parse_dates=True`。官方还写了它能读写常见文件格式（例如 csv、json、parquet）、云存储和数据库，更多例子指向 User Guide 的 IO 章节。

入门页把表达式和上下文当成下一步。表达式先写出要做的计算，例如用 `pl.col("weight") / (pl.col("height") ** 2)` 表示体重除以身高的平方。真正算出一列结果，要放进某个上下文里。文档依次演示了四种。`select` 选出并变换列，示例里用 `pl.col("birthdate").dt.year().alias("birth_year")` 取出出生年份，再用上面的表达式算出名为 `bmi` 的一列。也可以一次对多列做同一变换，并用 `.name.suffix` 给原列名加后缀。`with_columns` 和 `select` 很接近，差别是它把新列加回原表，而不是只留下选中的列。`filter` 按条件留下一部分行，例如保留出生年份早于 1990 的记录。多个条件可以写成分开的参数，不必先用 `&` 拼成一条。`group_by` 按表达式分组，示例按出生年代分组后用 `len` 计数，再配合 `agg` 计算平均体重、最大身高等。Python 示例里的 `maintain_order=True` 会让分组结果的顺序跟原表中出现的顺序一致，文档也写明这会让分组变慢，示例里加上它是为了让输出可复现。这些上下文可以链式组合。文档首页另有一段懒计算的例子：`pl.scan_csv(...)` 之后链式调用 `filter`、`group_by`、`agg`，最后用 `collect()` 才真正执行。入门不必一次把连接、拼接都走完。Getting started 后半段才演示按某列做 left join，以及纵向拼接成一张更长的表。先把读入、筛选、分组聚合跑通，再按需要看 joins 和 concat 那一节即可。

你准备先用 `DataFrame` 在内存里走一遍筛选和聚合，还是一开始就用 `scan_csv` 这条懒计算路径？
