我正在使用Polars,需要在数据预处理过程中删除仅包含空值的列。但是,我在使用Lazy API来实现这一点时遇到了麻烦。
例如,给定下表,我如何使用Polars的Lazy API删除列“a”?
df = pl.DataFrame(
{
"a": [None, None, None, None],
"b": [1, 2, None, 1],
"c": [1, None, None, 1],
}
)
df
shape: (4, 3)
┌──────┬──────┬──────┐
│ a ┆ b ┆ c │
│ --- ┆ --- ┆ --- │
│ f64 ┆ i64 ┆ i64 │
╞══════╪══════╪══════╡
│ null ┆ 1 ┆ 1 │
├╌╌╌╌╌╌┼╌╌╌╌╌╌┼╌╌╌╌╌╌┤
│ null ┆ 2 ┆ null │
├╌╌╌╌╌╌┼╌╌╌╌╌╌┼╌╌╌╌╌╌┤
│ null ┆ null ┆ null │
├╌╌╌╌╌╌┼╌╌╌╌╌╌┼╌╌╌╌╌╌┤
│ null ┆ 1 ┆ 1 │
└──────┴──────┴──────┘
我知道Issue #1613和过滤所有值都为空的列的解决方案,但这不是Lazy API。
仅供参考
# filter columns where all values are null
df[:, [not (s.null_count() == df.height) for s in df]]
我还知道Polars中的drop_nulls函数,它只能删除所有包含空值的行,不像Pandas中的dropna函数可以接受两个参数axis
和how
。有人能提供一个例子,说明如何使用Lazy API删除Polars中所有空值的列吗?
1条答案
按热度按时间hlswsv351#
你不能,至少不是以你想要的方式。polars对lazyframe的了解不够,不知道哪些列是空值,直到你
collect
。这意味着你需要一个collect来获得你想要的列,然后再用另一个collect来具体化你想要的列。把你的
df=df.lazy()
第一步:
这些列没有空值,所以现在将其 Package 在自己的select中
第二步: