跳到内容

用法

使用惰性 API,Polars 不会逐行运行每个查询,而是端到端地处理整个查询。为了充分利用 Polars,使用惰性 API 非常重要,因为

  • 惰性 API 允许 Polars 使用查询优化器应用自动查询优化
  • 惰性 API 允许您使用流式处理来处理大于内存的数据集
  • 惰性 API 可以在处理数据之前捕获 schema 错误

在这里,我们将看到如何从文件或现有 DataFrame 开始使用惰性 API。

从文件中使用惰性 API

在理想情况下,我们应直接从文件开始使用惰性 API,因为查询优化器可能有助于我们减少从文件中读取的数据量。

我们从 Reddit CSV 数据创建了一个惰性查询,并应用了一些转换。

通过使用 pl.scan_csv 开始查询,我们正在使用惰性 API。

scan_csv · with_columns · filter · col

q1 = (
    pl.scan_csv(f"docs/assets/data/reddit.csv")
    .with_columns(pl.col("name").str.to_uppercase())
    .filter(pl.col("comment_karma") > 0)
)

pl.scan_ 函数可用于多种文件类型,包括 CSV、IPC、Parquet 和 JSON。

在此查询中,我们告诉 Polars 我们想要

  • 从 Reddit CSV 文件加载数据
  • name 列转换为大写
  • comment_karma 列应用过滤器

惰性查询此时不会执行。有关运行惰性查询的更多信息,请参阅本页的执行惰性查询

DataFrame 使用惰性 API

访问惰性 API 的另一种方法是在内存中已创建的 DataFrame 上调用 .lazy 方法。

lazy

q3 = pl.DataFrame({"foo": ["a", "b", "c"], "bar": [0, 1, 2]}).lazy()

通过调用 .lazy,我们将 DataFrame 转换为 LazyFrame