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

Polars是否支持布尔类型列选择?如何筛选全为Null的列?

在Polars中筛选所有行均为Null的列

现有代码的问题

你当前的写法存在明显局限性:

  • 当存在多个全为Null的列时,columns[0]只会返回第一个符合条件的列名,丢失其他符合条件的列;
  • 写法冗余绕弯,通过.row(0)取结果再切片的方式不够直观,可读性差。

更优解决方案

方法1:简洁生成全Null列名列表

通过select生成各列是否全为Null的结果,再提取符合条件的列名:

import polars as pl

# 获取所有全Null列的列名列表
all_null_status = specific_data.select(pl.all().is_null().all()).to_dict(as_series=False)
nan_columns = [col for col, is_null in all_null_status.items() if is_null[0]]

方法2:链式调用实现更优雅

利用Polars的链式API,一步完成筛选和提取:

nan_columns = (
    specific_data
    .select(pl.all().is_null().all())
    .melt()
    .filter(pl.col("value"))
    .select("variable")
    .to_series()
    .to_list()
)

方法3:遍历列直接判断(适合小数据集)

如果数据集规模不大,直接遍历列进行判断更直观:

nan_columns = [col for col in specific_data.columns if specific_data[col].is_null().all()]

验证示例

假设我们有如下测试DataFrame:

specific_data = pl.DataFrame({
    "col1": [None, None, None],
    "col2": [1, 2, 3],
    "col3": [None, None, None]
})

使用上述方法会得到nan_columns = ["col1", "col3"],而你的原代码只会返回"col1",清晰体现出原写法的缺陷。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 02:48:17