为 Polar 表达式提供文字数组

Supply a literal array to a Polar expression

如何在 Polars 表达式中定义文字数组?例如,如果我想过滤表达式是否为真以及掩码中的给定值是否为真。

import polars as pl

df = pl.DataFrame(dict(x=[1,2,3,4,5,6]))
mask = [True, True, False, False, True, True]

df.filter(pl.col('x') % 2 == 0 & pl.lit(mask))
# could not convert value [True, True, False, False, True, True] as a Literal

对于这个特定的例子,我可以在数据框上使用 [] 索引,然后进行过滤,但对于更复杂的表达式,如果我可以将数组插入到表达式中会更容易。

df.filter((pl.col("x") % 2 == 0) & pl.Series(mask))

注意添加的括号。 (pl.col("x") % 2 == 0) 产生一系列布尔值,然后是 bit-anded row-wise 和 pl.Series(mask).

使用 Series 还可以设置值的数据类型,这可以派上用场。

Series constructor 的文档解释了更多内容。