自定义缺失值列表检测pandas DataFrame时False被误判的原因
问题原因
核心原因是 Python 中布尔值(bool)是整数(int)的子类:False 在数值层面等价于 0,True 等价于 1,你可以直接执行 print(False == 0) 验证,返回结果为 True。
当你调用 df.isin(null_values) 做等值匹配时,Sick 列的 False 会被判定为和列表里的 0 匹配,所以该列会被误识别为包含你定义的缺失值。
解决方法
你可以通过分类型做缺失值匹配,避免布尔列和数值0的匹配冲突:
# 拆分不同类型的缺失值规则,排除布尔列的0匹配 str_null_values = ["nan", "missing"] # 字符串类缺失值匹配 str_null_mask = df.isin(str_null_values) # 仅对非布尔列做数值0的缺失值匹配 num_null_mask = df.select_dtypes(exclude="bool").eq(0) # 合并匹配结果 total_null_mask = str_null_mask | num_null_mask # 输出包含缺失值的列 print(df.columns[total_null_mask.any()])
运行后就不会再误判Sick列为包含缺失值了。
内容的提问来源于stack exchange,提问作者Niam45
相关产品推荐
相关产品推荐

