用法
使用惰性 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
方法。
q3 = pl.DataFrame({"foo": ["a", "b", "c"], "bar": [0, 1, 2]}).lazy()
通过调用 .lazy
,我们将 DataFrame
转换为 LazyFrame
。