数据清洗过程中,经常需要对缺失值和异常值进行查看和处理,常用代码总结如下:
一、缺失值处理
1.1 缺失值识别
# 查看数据缺失情况
# 输入数据集
# 输出各字段缺失值的数量以及占比,并降序展示
def missing(data):
missingSum=data.isnull().sum() #总缺失值
missingSumPrt=100 * data.isnull().sum()/len(data) #缺失值占比
MissingTb1=pd.concat([missingSum,missingSumPrt],axis=1)
MissingTb1Col=MissingTb1.rename(columns={0:"Missing Values",1:"% of Total Values"})
# MissingRes=MissingTb1Col[MissingTb1Col.iloc[:,1]!=0].sort_values("% of Total Values",ascending=False).round(1)
MissingRes=MissingTb1Col.sort_values("% of Total Values",ascending=False).round(1)
return MissingRes
二、异常值处理
2.1 归一化处理
# 为避免不同特征量纲差异大,对模型准确性产生影响。需对数据归一化处理:归一化方法很多,本文采用对数化后min-max方法(归一化处理前须先对离群点进行处理)
def stdFuc(data,cols,quantile=0.99):
#首先对数据对数化处理
data['log']=[math.log(i+1) for i in data[cols].reset_index(drop=True).tolist()]
Q=np.quantile(data['log'],quantile) #求指定分位点的数据
data.loc[data['log']>Q,'log']=Q
#归一化:采用min-max方法(需注意避免分母为零)
if (Q-min(data['log'])>0):
std=(data['log']-min(data['log']))/(Q-min(data['log']))
else:
std=data['log']+1-data['log'] #注意:std=1 和std=data['log']+1-data['log']不同,后者为向量。
return std