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
相关产品推荐
相关产品推荐

