You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Polars筛选指定列中存在null值的所有行?

解决Polars中筛选指定列含Null值行的问题

需求:筛选出DataFrame中指定列至少有一个null值的完整行,无需检查所有列。示例DataFrame如下:

import polars as pl

df = pl.from_repr("""
┌───────┬───────┬─────┬───────┐
│ a     ┆ b     ┆ c   ┆ d     │
│ ---   ┆ ---   ┆ --- ┆ ---   │
│ str   ┆ str   ┆ str ┆ bool  │
╞═══════╪═══════╪═════╪═══════╡
│ abc   ┆ null  ┆ u   ┆ true  │
│ def   ┆ abc   ┆ v   ┆ true  │
│ ghi   ┆ def   ┆ null┆ true  │
│ jkl   ┆ uvw   ┆ x   ┆ true  │
│ mno   ┆ xyz   ┆ y   ┆ null  │
│ qrs   ┆ null  ┆ z   ┆ null  │
└───────┴───────┴─────┴───────┘
""")

尝试以下代码时出现错误:

columns = ["a", "b", "d"]
df.filter(pl.any_horizontal(pl.all(*columns).is_null()))

错误信息:SchemaError: invalid series dtype: expected Boolean, got str for series with name "a"


正确实现方法

问题出在pl.all(*columns)的用法上:pl.all()接收的是列选择器而非列名列表,直接传入列名会导致它尝试将这些列作为整体处理,而非逐个检查Null值。

写法一:列表推导式生成表达式

对指定的每一列单独调用is_null(),再用any_horizontal判断任意一列满足条件:

columns = ["a", "b", "d"]
result = df.filter(pl.any_horizontal([pl.col(col).is_null() for col in columns]))
print(result)

写法二:批量列选择(更简洁)

用pl.col(columns)批量选择目标列,链式调用is_null()和any_horizontal,效果与写法一完全一致:

columns = ["a", "b", "d"]
result = df.filter(pl.any_horizontal(pl.col(columns).is_null()))
print(result)

预期结果

执行后会筛选出仅a、b、d列中存在Null值的行:

┌───────┬───────┬─────┬───────┐
│ a     ┆ b     ┆ c   ┆ d     │
│ ---   ┆ ---   ┆ --- ┆ ---   │
│ str   ┆ str   ┆ str ┆ bool  │
╞═══════╪═══════╪═════╪═══════╡
│ abc   ┆ null  ┆ u   ┆ true  │
│ mno   ┆ xyz   ┆ y   ┆ null  │
│ qrs   ┆ null  ┆ z   ┆ null  │
└───────┴───────┴─────┴───────┘

内容的提问来源于stack exchange,提问作者fanta fles

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 01:23:10