Python如何识别DataFrame中以'?'表示的非NaN缺失值?
识别DataFrame中'?'这类非常规缺失值的方法
Pandas的isnull()方法仅能识别标准缺失值(如NaN、np.nan),像字符串'?'这类自定义缺失标记不会被默认检测到,你可以通过以下几种方式解决:
方法1:读取数据时直接指定缺失标记
如果还未读取数据集,在读取时用na_values参数将'?'定义为缺失值,这样数据读入后会自动把'?'转为np.nan,后续就能用常规的isnull()检测:
import pandas as pd import numpy as np # 读取csv时指定'?'为缺失值 df = pd.read_csv('your_dataset.csv', na_values='?') # 常规统计缺失值 missing_values = df.isnull().sum() print(missing_values[missing_values > 0])
如果有多个自定义缺失标记(比如'NA'、'N/A'),可以传入列表:
df = pd.read_csv('your_dataset.csv', na_values=['?', 'NA', 'N/A'])
方法2:已读入数据时替换'?'为标准缺失值
如果数据已经加载到DataFrame中,用replace()把'?'替换成np.nan,再进行缺失值统计:
import numpy as np # 替换所有'?'为np.nan,inplace=True直接修改原DataFrame df.replace('?', np.nan, inplace=True) # 统计缺失值 missing_values = df.isnull().sum() print(missing_values[missing_values > 0])
方法3:直接统计'?'的数量(无需转换)
如果不想修改原数据,也可以直接比较每个单元格是否等于'?',然后统计数量:
# 统计每列中'?'的个数 missing_values = (df == '?').sum() # 输出有'?'的列及其数量 print(missing_values[missing_values > 0])
内容的提问来源于stack exchange,提问作者gnocchi17
相关产品推荐
相关产品推荐

