Skip to content

logo

极速数据框库

Polars 是一个极快的数据帧库,用于操作结构化数据。其核心是用 Rust 编写的,并且可用于 Python、R 和 NodeJS。

主要特点

  • 快速: 用Rust从头编写,设计接近机器且没有外部依赖。
  • I/O: 对所有常见数据存储层的一流支持:本地、云存储和数据库。
  • 直观的API: 以预期的方式编写您的查询。Polars 内部会使用其查询优化器确定最有效的执行方式。
  • 核心外处理: 流式API允许你在不需要所有数据同时存在于内存中的情况下处理结果。
  • 并行: 利用您机器的能力,通过将工作负载分配到可用的CPU核心上,无需任何额外配置。
  • 向量化查询引擎:使用Apache Arrow,一种列式数据格式,以向量化方式处理您的查询,并使用SIMD优化CPU使用。
  • GPU 支持: 可选择在 NVIDIA GPU 上运行查询,以实现内存工作负载的最大性能。

新用户使用DataFrames

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

哲学

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功能上可用

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 orlp coastalwhite reswqa zundertj ghuls universalmind303 mcrumiller c-peters itamarst wence- lukemanley matteosantama Dandandan henryharbeck magarick cmdlineluser ibENPC deanm0000 ion-elgreco moritzwilksch eitsupi jorgecarleitao mickvangelderen rodrigogiraoserrao braaannigan r-brink petrosbar jonashaag borchero marcvanheerden cnpryer ryanrussell barak1412 Julian-J-S josh cjermain marioloko thatlittleboy illumination-k messense flisky jakob-keller ruihe774 Wainberg

贡献

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

许可证

本项目根据MIT许可证的条款进行授权。