一、查看缺失值
df.info()
df.isnull().sum()
注:有些缺失值会于隐藏类别型变量中
df.x1.value_counts() # 发现缺失值被表示成-
df['x1'].replace('-', np.nan, inplace=True)
二、处理缺失值
(一)删除
一般情况下一定不能随便删除异常值,因为对于分类型变量,删除很可能影响其分布。除非缺失值很少。
# dropna
df=df.dropna().reset_index(drop=True)
df.dropna(axis=0, how='any', subset=['x1'],inplace=True) #在原数据上进行操作
# notnull
data2= data1[data1.x1.notnull()]
# default ‘any’指带缺失值的所有行;'all’指清除全是缺失值的行
(二)不处理
xgboost建模时会自动处理缺失值,但是前提是训练集和预测集的分布相同。
(三)插值补全
包括均值/中位数/众数/建模预测/多重插补/压缩感知补全/矩阵补全等
(四)分箱
缺失值一个箱
data.x1 = data.x1.fillna(-1) # x1一般情况下只有正值
test.x1 = test.x1.fillna(-1)
三、缺失值可视化
# 白线越多,缺失越多
import missingno as msno
msno.matrix(data.sample(500))
# 热度值越大,两个特征同时缺失的比例越大
msno.heatmap(data,figsize=(16, 7))#figsize是指图的大小
# 查看缺失的数量和比例
msno.bar(Test_data.sample(1000))