Polars Rust 完整指南:安装、方法与实战案例

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

Polars Rust 库:完整使用指南

Polars 是一个用 Rust 编写的高性能 DataFrame 数据处理库。它提供了类似 pandas 的 API,但在速度和内存效率上远超后者。与 pandas 受限于单线程执行和内存消耗不同,Polars 从设计之初就支持多线程运行,并通过惰性计算(Lazy API)优化查询计划。

Polars 的核心目标是让用户能够在单台机器上处理从数百 MB 到数 TB 的大规模数据,而无需借助 Spark 等分布式系统。这得益于其高效的内存管理(零拷贝、基于 Apache Arrow 的后端)、向量化操作和自动并行化。对于 Rust 开发者来说,Polars 并非 Python 库的简单封装,而是充分利用 Rust 语言特性的原生库:内存安全、类型系统和卓越性能。

该库提供两种 API:Eager(即时计算)和 Lazy(惰性计算)。Eager API 适合交互式探索和小型数据集,能立即看到结果。Lazy API 则允许构建查询计划,经过优化后一次性执行,这对于复杂转换和大数据场景至关重要。Polars 还支持 CSV、Parquet、JSON、IPC(Arrow)格式以及通过 SQL 连接数据库。

安装方法

要在 Rust 项目中添加 Polars,需在 Cargo.toml 文件中添加依赖:

[dependencies]
polars = "0.44.0"  # 请查看 crates.io 上的最新版本

如果需要额外功能(如字符串正则表达式、日期处理或 SQL 集成),可使用特性(features):

[dependencies]
polars = { version = "0.44.0", features = ["lazy", "strings", "dtype-date", "dtype-datetime", "sql", "parquet", "csv"] }

主要特性说明:

  • lazy — 惰性 API(生产环境必备)
  • strings — 字符串处理方法(contains、replace、extract)
  • dtype-date、dtype-datetime — 日期类型支持
  • sql — SQL 接口
  • parquet — Parquet 读写
  • csv — CSV 读写
  • is_in、rank、moment — 其他实用方法

添加依赖后,运行:

cargo build

快速上手

以下是一个创建 DataFrame 并执行简单查询的最小示例:

use polars::prelude::*;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    // 从向量创建 DataFrame
    let df = df! [
        "name" => &["Alice", "Bob", "Charlie"],
        "age" => &[25, 30, 35],
        "salary" => &[50000, 60000, 70000]
    ]?;

    println!("原始 DataFrame:\n{:?}", df);

    // 过滤:年龄大于 28 岁
    let filtered = df.clone().lazy()
        .filter(col("age").gt(lit(28)))
        .collect()?;

    println!("过滤结果 (age > 28):\n{:?}", filtered);

    // 聚合:计算平均薪资
    let avg_salary = df.clone().lazy()
        .select([col("salary").mean().alias("avg_salary")])
        .collect()?;

    println!("平均薪资:\n{:?}", avg_salary);

    Ok(())
}

这段代码创建了一个包含三列的数据表,按年龄过滤行,并计算平均薪资。注意这里使用了 lazy()——即使是简单操作,也推荐使用惰性 API 以获得更好的性能。

推荐