python数据预处理(1)———缺失值处理

在进行数据分析项目、比赛中,一手数据往往是脏数据。提高数据质量即数据预处理成为首要步骤,也会影响后期模型的表现。在此对利用Python进行预处理数据做一个总结归纳。

首先是缺失值处理。

#读取数据
import pandas as pd
filepath= 'F:/...'#本地文件目录
df= pd.read_csv(train,sep=',')#df数据格式为DataFrame

查看缺失值

查看每一特征是否缺失及缺失值数量可能影响着处理缺失值的方法

df.isnull().sum() #查看每一列缺失值的数量
df.info() #查看每一列数据量和数据类型

删除缺失值

如果有些特征数据量很少,缺失值很多,则此类特征难以作为刻画样本形象的特征,考虑直接将该特征删除即删除该列。
对于极少量数据缺失例如10000个样本有1个缺失值,则不管删除与否影响并不大,可考虑删除。

df.dropna(axis=0,how='any',inplace = True)
# axis = 0,删除带有空值的行
# axis = 1,删除带有空值的列
# how = 'any',有空值即删
# how = 'all',全空才删
# inplace = True,在原有df上删除空值,return None
# inplace = False,返回删除空值后的df, return df

填补缺失值

个人认为在多数情况下,对于缺失值的处理则是能不删则不删,尤其是在比赛中,最好不要为了省事将含有缺失值的样本直接删除,这必然造成数据的浪费,影响模型精度。

(1)固定值填充

df['列名1'].fillna(value = 30,inplace=True)
# value = 30,用30填补空值
# value = df['列名1'].mean() 均值填充
# value = df['列名1'].median() 中位数填充
# value = df.Mer_min_distance.mode()[0] 众数填充

一方面,个人认为均值填充和中位数填充都很省事,差别不大,常常采用均值填充。众数填充也很少用到。
另一方面,单纯使用固定值填充往往不是很好,可以考虑采用按照类别均值填充。

(2)前(后)值填充

df['列名1'].fillna(method = 'pad',inplace=True)

method参数取值:{‘pad’, ‘ffill’,‘backfill’, ‘bfill’, None},使用过程中因为对ipad很熟悉,故常常用 ‘pad’填充

‘pad’ or ‘ffill’ : 用一个非缺失值填充
‘backfill’ or ‘bfill’:用一个非缺失值填充
‘None’ or default : 默认采用固定值填充

(3)用字典填充

dict = {'列名1': 0, '列名2': 1, '列名3': 2}
df.fillna(value = dict,inplace = True)

不同特征填补不同缺失值,用字典填充能很好解决。

(4)随机森林填充

利用随机森林回归预测填充缺失值,代码做了稍微总结,仅供参考
(借鉴:https://blog.csdn.net/Q2605894893/article/details/81327027)

from sklearn.ensemble import RandomForestRegressor

def fill_na_regression(df): # 利用随机森林回归填充
df_blank= df[['column1','column2', 'column3']]

# 假设column1为需要填充的列
df_train= df_blank[age_df.column1.notnull()].as_matrix()
df_test= df_blank[age_df.column11.isnull()].as_matrix()

# y为目标值
y = df_train[:, 0]

# X为特征属性值
X = df_train[:, 1:]

rfr = RandomForestRegressor(random_state=0, n_estimators=2000, n_jobs=-1)
rfr.fit(X, y)

# 用得到的模型进行预测未知列的值
result= rfr.predict(df_test[:, 1:])
# 用得到的预测结果填补原缺失数据
df.loc[ (df.column1.isnull()), 'column1' ] = result
return df

小结

此处归纳了部分常用处理缺失值的方法,多使用几次很容易掌握。
还有很多填补缺失值的方法,例如热卡填充、KNN填充、回归填充等等,个人在使用过程中暂时没有过多采用其他复杂的方法,而是把更多工作放到特征提取和模型构建当中。
填充过程中也可考虑特征之间的相关性,根据强相关性的其他特征来填充缺失特征值,需要具体情况具体分析了。

作者:开着奔驰种地

相关推荐

在这里插入图片描述

栈的原理详解及其python实现

在这里插入图片描述

机器学习推导+python实现(二):逻辑回归

[Python语言程序设计-第11期]测验3: 基本数据类型 (第3周)

在这里插入图片描述

在centos中搭建用pycharm的开发python程序的环境