跳到内容

logo

极速 DataFrame 库

Polars 是一个用于处理结构化数据的极速 DataFrame 库。其核心用 Rust 编写,并提供 Python、R 和 NodeJS 接口。

主要特性

  • 快速:完全用 Rust 从头编写,设计贴近底层机器,无外部依赖。
  • I/O (输入/输出):对所有常见数据存储层提供一流支持:本地、云存储和数据库。
  • 直观的 API:以您预期的方式编写查询。Polars 会利用其查询优化器在内部确定最有效的执行方式。
  • 核外处理:流式 API 允许您处理结果,而无需将所有数据同时加载到内存中。
  • 并行:通过在可用 CPU 核心之间分配工作负载,充分利用您机器的性能,无需额外配置。
  • 向量化查询引擎
  • GPU 支持:可选地在 NVIDIA GPU 上运行查询,以在内存工作负载中实现最大性能。
  • Apache Arrow 支持:Polars 可以消费和生成 Arrow 数据,通常进行零拷贝操作。请注意,Polars 不是基于 Pyarrow/Arrow 实现构建的。相反,Polars 有自己的计算和缓冲区实现。

DataFrame 新用户

DataFrame 是一种二维数据结构,对于数据操作和分析非常有用。它具有行和列的标签轴,每列可以包含不同的数据类型,使得合并和聚合等复杂数据操作变得更加容易。由于其灵活性以及存储和处理数据的直观方式,DataFrame 在现代数据分析和工程中越来越受欢迎。

理念

Polars 的目标是提供一个闪电般快速的 DataFrame 库,它能

  • 利用您机器上的所有可用核心。
  • 优化查询以减少不必要的工作/内存分配。
  • 处理远大于可用 RAM 的数据集。
  • 提供一致且可预测的 API。
  • 遵循严格的模式(数据类型在运行查询前应已知)。

Polars 用 Rust 编写,这使其具有 C/C++ 的性能,并允许它完全控制查询引擎中性能关键的部分。

示例

scan_csv · filter · group_by · collect

import polars as pl

q = (
    pl.scan_csv("docs/assets/data/iris.csv")
    .filter(pl.col("sepal_length") > 5)
    .group_by("species")
    .agg(pl.all().sum())
)

df = q.collect()

LazyCsvReader · filter · group_by · collect · 在功能 csv 上可用 · 在功能 streaming 上可用

use polars::prelude::*;

let q = LazyCsvReader::new("docs/assets/data/iris.csv")
    .with_has_header(true)
    .finish()?
    .filter(col("sepal_length").gt(lit(5)))
    .group_by(vec![col("species")])
    .agg([col("*").sum()]);

let df = q.collect()?;

更详细的介绍可以在下一章找到。

社区

Polars 拥有一个非常活跃的社区,并且发布频繁(大约每周一次)。以下是该项目的一些主要贡献者

ritchie46 stinodego alexander-beedie MarcoGorelli nameexhaustion coastalwhite orlp reswqa zundertj mcrumiller ghuls universalmind303 lukemanley c-peters itamarst wence- matteosantama JakubValtar henryharbeck cmdlineluser eitsupi deanm0000 Dandandan magarick ion-elgreco r-brink moritzwilksch jorgecarleitao borchero braaannigan rodrigogiraoserrao mickvangelderen petrosbar kdn36 etiennebacher jonashaag Julian-J-S marcvanheerden cnpryer ryanrussell barak1412 josh cjermain flisky messense illumination-k thatlittleboy marioloko jakob-keller

贡献

我们感谢所有贡献,从报告错误到实现新功能。阅读我们的贡献指南以了解更多。

许可

本项目根据 MIT 许可的条款获得许可。