Polars

Polars 是一个用 Rust 编写、面向 Python 和其他语言的快速 DataFrame 库,因有望成为 pandas 在内存表格数据分析领域的继任者而受到关注。评论者强调它在大数据集上的显著速度和内存优势、更一致且类似 SQL 的延迟 API,以及与 Arrow 和 DuckDB 等工具的紧密集成;同时也指出其 GPU 和分布式支持尚不成熟、破坏性变更频繁、以及与 pandas 相比生态兼容性较弱等取舍。许多人认为它非常适合新的、性能关键的工作负载,但建议在已有大量 pandas 代码的项目中谨慎采用。

Polars 是什么

  • 用 Rust 编写的列式 DataFrame 库,提供给 Python、JS、Rust、R、Elixir、Ruby 使用。
  • 基于 Apache Arrow,带有 OLAP 风格的查询引擎,并支持可选的延迟执行。
  • 目标是单机内存内分析;目前还不支持分布式或 GPU 执行。

性能 vs Pandas(以及其他工具)

  • 很多报告称,在 groupby、join、扫描多 GB 或 1000 万行以上数据集时,相比 pandas 可快一个数量级(例如约 1 分钟 → 约 1 秒)。
  • 被提到的关键优势包括:Rust 实现、多线程、延迟查询规划、更低内存占用,以及与 Arrow 的互操作性。
  • 对于小数据集(≤10 万行),用户表示性能差异通常难以被人感知。
  • 提到的基准测试:DuckDB 的 db-benchmark 显示 Polars 和 DuckDB 明显领先于 pandas;也有人指出在许多工作负载下 DuckDB 可能比 Polars 更快。
  • 超出内存 / 分布式工具(Spark、Dask、Modin、Vaex、RAPIDS)被视为不同类别;有人提醒把它们纳入单机基准比较会有些误导。

API、易用性与生态

  • 许多人认为 Polars 的 API 比 pandas 更一致、更像 SQL,也更容易推理;表达式链式写法和延迟 DataFrame 受到称赞。
  • 也有人觉得它更啰嗦,尤其是在按行(“axis=1”)或跨切片操作以及复杂转换时。
  • 互操作性很强:可通过 Arrow 与 pandas/DuckDB 进行便捷的零拷贝交换;常见模式是“Polars 负责重活,pandas 负责边缘部分”。
  • 有人抱怨关键数据科学库(例如 scikit-learn、绘图工具)仍然以 pandas 为中心,迫使进行转换。

文档、上手与营销

  • 着陆页被批评默认用户已经知道“DataFrames”,并强调速度,而没有清楚说明“它是什么”以及使用场景。
  • “User Guide”和“Docs”的分裂让一些人困惑;也有人觉得文档本身扎实,并欣赏简洁的 API。
  • 提到即将推出的专门 Polars 书籍和官方用户指南;支持主要通过 Discord,且有人担心知识被困在聊天里。

稳定性、采用与工具链

  • 由于仍处于 1.0 之前状态且经常有破坏性变更,一些团队对迁移大型代码库持谨慎态度;也有人在生产中愉快使用,并接受每季度更新。
  • JS 绑定被描述为有前景,但仍然存在 bug、还不成熟。
  • GitHub Copilot 和类似工具对 pandas 的支持要好得多;少数用户主要因为 AI 助手支持而继续使用 pandas,而另一些人则认为工具选择不应受此驱动。

更广泛的看法

  • 围绕“仅凭速度是否足以推动切换”与“清晰性和生态系统”的讨论存在分歧。
  • 有人把 Polars 看作“更快的 pandas”,并认为它很可能成为长期接班人;也有人更倾向于 SQL 引擎(DuckDB、Postgres)或完全不使用 DataFrame 的方法。