Polars 2.0 预览:默认开启流式引擎

Pre-Release of Polars 2.0

Polars 2.0 预览:默认开启流式引擎

Polars 2.0 发布候选版,这次升级主打“无聊”的稳定性,旨在通过更合理的默认设置提升性能。最核心的变化是 LazyFrame 查询默认启用 streaming engine,预计带来 5 倍性能提升和巨大的内存优化,但部分操作不再默认保证行顺序。新版本还大幅增强了严格性,例如 is_in 操作在类型不匹配时将直接报错而非静默转换,水平拼接也会检查长度一致性,避免隐藏的数据 bug。针对 AI 代理开发,Polars 引入了更清晰的错误提示和新的异常类型,帮助快速定位问题。虽然移除了部分旧 API,但整体体验将更流畅,为未来的异步管道和更强大的 SQL 支持铺平道路。

我们不打算把 Polars 2.0 做成一个功能大爆发版本,事实上,我们希望这对大家来说是一次平淡无奇的体验。
  1. benrutter

    我们不打算把 Polars 2.0 做成一个功能大爆发的大版本。事实上,我们希望这对你来说是一次平淡无奇的更新。我们提升主版本号的原因,是为了抛弃过去那些目前阻碍我们的设计决策,并将默认设置更改为对更广泛用户群体更有利的合理配置。

    我知道这种观点暴露了我是个多么无趣的人,但我就是喜欢看到项目像这样认真对待语义化版本控制(semver)!版本号的提升真的应该专注于移除过时的冗余代码,而不是推出光鲜亮丽的新功能。

    我已经使用 Polars 一段时间了,他们对稳定性的重视当初很大程度上说服了我进行迁移!

  2. perrygeo

    对我来说,Polars 的超能力在于生产环境的稳定性。

    Pandas 倾向于将所有问题推迟到运行时,充斥着各种隐藏的启发式规则,特别是在列类型和缺失值方面。你很难知道是否测试了所有边缘情况。测试代码的唯一方法就是把各种数据变体都扔进去。如果你坐在笔记本前,有耐心帮它验证和“清洗”数据,那倒也无妨。但如果你在凌晨 3 点被叫醒,因为数据管道失败了——它期望一个 int 列却收到了 float,那就糟透了。

    Polars 默认更加严格,并通过其规划器(planner)将成本前置。由此生成的应用在 production 中明显更加稳定。你可以测试代码,并合理确信它在真实数据上也能正常工作。

    我对 API 的人体工学或语法真的没什么兴趣——两者都还行。关键在于它们如何处理运行时的数据变化。你能写出在数据变体下不会崩溃的通用代码吗?Pandas 绝无可能。Polars 绝对可以!

    加分项:Polars 还有 Rust API,编译器可以有效地证明你的程序处理了所有边缘情况。编写无需人工干预运行数年的 Rust Polars 应用是很常见的。

  3. trombonechamp

    除了性能之外,有没有什么理由让 maintain_order=False 成为默认值?我之所以问,是因为 Polars 被用于许多科学数据分析流程,而非确定性行为是科学计算中一个众所周知的错误来源(例如 https://pmc.ncbi.nlm.nih.gov/articles/PMC6919963/)。新的默认值要求用户在判断代码是否正确时,必须在脑海中记住 API 的实现细节。这在科学计算中很棘手,因为正确答案无法提前预知,所以错误可能会悄悄溜过去,静默地给出错误结果。

  4. bbstats

    烦死我了,"Use instead: .cat.to(dtype) for int → categorical, .cat.physical() for categorical → int." 这句话居然没有给出必要的代码示例!

  5. lmeyerov

    转向流式处理以及通用的离核(out-of-core)处理非常棒。

    我们最近为 GFQL(在 DataFrame 上运行 Cypher 图查询,无需数据库)添加了一个 Polars 后端,支持 CPU 和 GPU 模式,效果令人印象深刻。相比 Pandas/cudf 有显著提升,并使 GFQL 在更多类别上击败了流行系统,比如低延迟,而不仅仅是大数据集:https://www.graphistry.com/blog/cypher-on-polars-cpu-gpu-gra...

  6. bobson_dugnutt5

    我爱 Polars。我在工作中做了大量的推广,让大家放弃 Pandas 转而使用它。

  7. Kydlaw

    很高兴看到 Polars 周围又有动静了。由于相比 Pandas 和 SQL 拥有更好的人体工学,它一直是我数据处理的首选库。

    但他们最近有点沉寂,所以我最近开始更多地关注 DuckDB……直到最近 DuckLab 被 AWS 收购。

  8. arn3n

    将流式引擎设为默认值的决定真的很有趣。我的直觉是,这会比其他更易于并行处理的批量处理 DataFrame 操作更慢,因为流式引擎必然按顺序逐行处理数据。是我的直觉错了,还是我高估了 Polars 的自动并行化程度?

同日更多故事

2026-09-03