Skip to content

用法

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

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

这里我们看到了如何从文件或现有的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