Pandas可扩展的行级仅单列非空校验方法实现
解决方案
核心思路是直接统计每行待校验列的非空值数量,确保不会同时出现2个及以上非空值,天然支持任意数量列的校验需求,无需硬编码每列的校验逻辑。
通用校验代码
全表所有列校验
如果需要校验DataFrame的全部列,直接调用notna()按行求和即可:
# 校验每行非空值数量不超过1个,符合规则要求 assert (df.notna().sum(axis=1) <= 1).all(), "存在行同时包含多个非空值"
指定列校验
如果仅需校验部分列(后续新增列只需修改check_cols列表即可):
# 自定义待校验列列表,扩展列数时仅需调整该列表 check_cols = ["var1", "var2", "var3"] assert (df[check_cols].notna().sum(axis=1) <= 1).all(), "指定列中存在行同时包含多个非空值"
扩展优化:定位非法行
如果需要快速定位不符合规则的行,可以调整写法直接打印异常行:
check_cols = ["var1", "var2", "var3"] # 筛选出不符合规则的行 invalid_rows = df[df[check_cols].notna().sum(axis=1) > 1] assert invalid_rows.empty, f"发现不符合规则的行:\n{invalid_rows}"
额外说明
如果你的业务规则要求每行必须有且仅有1个非空值(不允许全空行),只需将上述代码中的<=1改为==1即可适配。
内容的提问来源于stack exchange,提问作者lakeside
相关产品推荐
相关产品推荐

