如何实现drop_nulls()反向操作:保留含至少一个空值的行
保留含至少一个空值的行(无需手动枚举列)
要实现和drop_nulls()相反的逻辑——保留所有包含至少一个空值的行,同时避免手动列出每一列,用Polars的pl.all()和pl.any_horizontal()就能轻松搞定,不用逐个指定列名。
完整实现代码(匹配你原逻辑)
import polars as pl import sys # 筛选出存在空值的行,提取唯一的name字段 null_entries = ( df.filter(pl.any_horizontal(pl.all().is_null())) .select("name") .unique() .rows() ) # 打印提示信息 for (name,) in null_entries: print(f"Ignoring `{name}` because it has at least one null", file=sys.stderr) # 移除含空值的行(完成你原代码的收尾操作) df = df.drop_nulls()
关键逻辑说明
pl.all():自动选中DataFrame的所有列,省去手动列"a"、"b"、"c"的麻烦pl.any_horizontal(pl.all().is_null()):对每行做横向检查,只要任意一列是空值,就标记该行符合条件,完美替代多列is_null()的或运算
如果需要直接保留含空值的行
要是你的核心需求是保留而非后续删除这些行,直接用下面的代码:
# 保留所有包含至少一个空值的行 df_with_nulls = df.filter(pl.any_horizontal(pl.all().is_null()))
内容的提问来源于stack exchange,提问作者DJDuque
相关产品推荐
相关产品推荐

