Pandas DataFrame未被isnull识别的缺失值如何筛选与删除
你遇到的是非标准缺失值的问题,isnull()只会识别pandas约定的缺失值(比如np.nan、None、NaT等),空字符串、全空格字符串、不可见特殊字符这类有效字符串类型的占位缺失值,不会被isnull()判定为缺失,所以统计出来的空值数量为0。
第一步:定位异常值的具体内容
先输出Gender字段的所有唯一值,确认异常的那类取值到底是什么:
print(Patients['Gender'].unique())
大概率你会看到输出里有''(空字符串)、' '(全空格)或者'\t'/'\n'这类不可见的控制字符。
第二步:筛选异常行
可以根据自己的需求选对应的筛选方法:
- 方法1:筛选所有性别取值不是M也不是F的行(适用范围最广,能覆盖所有异常值)
abnormal_rows = Patients[~Patients['Gender'].isin(['M', 'F'])]
- 方法2:筛选去除首尾空白后为空的行(覆盖空字符串、全空格、带制表符/换行符的空白类异常)
abnormal_rows = Patients[Patients['Gender'].str.strip() == '']
你可以打印abnormal_rows确认是不是你要找的那25%的异常数据。
第三步:删除异常行
直接过滤掉异常行即可,推荐两种稳妥的写法:
- 只保留取值为M/F的行(可以避免其他未知异常值混入)
Patients = Patients[Patients['Gender'].isin(['M', 'F'])].reset_index(drop=True)
- 仅过滤掉空白类取值的行
Patients = Patients[Patients['Gender'].str.strip() != ''].reset_index(drop=True)
处理完后可以再执行Patients['Gender'].unique()或者重新画图验证,异常的无名称类别就会被清除。
内容的提问来源于stack exchange,提问作者PassaroBagante
相关产品推荐
相关产品推荐

