Polars 上下文指南
Polars 是一个用 Rust 编写的 DataFrame 库,使用 Arrow 作为其底层数据结构。它的目标是通过并行化 DataFrame 上的查询,提供一个快速的解决方案。
上下文
Polars 表达式几乎可以在任何地方使用,但是表达式需要一个上下文,这些上下文包括:
- 选择:
df.select([..])
- 分组集合:
df.groupby(..).agg([..])
- 横向堆叠(hstack) 或者增加列:
df.with_columns([..])
语法糖
需要上下文的主要原因是:即使在即时执行中,你也在使用 Polars 的延迟执行API。例如:
df.groupby("foo").agg([pl.col("bar").sum()])
去掉语法糖后:
(df.lazy().groupby("foo").agg([pl.col("bar").sum()])).collect()
这种设计可以让 Polars 把表达式推送给查询引擎,进行一些优化和缓存操作。
select 上下文
在 select
上下文中,选择操作是按照列进行的。在选择向下文的表达式必须要返回 Series
并且这些 Series
需要有相同的长度或者长度为1。
out = df.select(
[
pl.sum("nrs"),
pl.col("names").sort(),
pl.col("names").first().alias("first name"),
(pl.mean("nrs") * 10).alias("10xnrs"),
]
)
print(out)
Groupby 上下文
在 groupby
上下文中的表达式主要作用域分组上,因此他们会返回任意长度(每个组可能有不同数量的成员)。
out = df.groupby("groups").agg(
[
pl.sum("nrs"), # 通过groups列对nrs求和
pl.col("random").count().alias("count"), # 记录组数
# 如果name != null记录random列的和
pl.col("random").filter(pl.col("names").is_not_null()).sum().suffix("_sum"),
pl.col("names").reverse().alias(("reversed names")),
]
)
print(out)
更多详细信息和高级用法,请访问Polars 官方文档。