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填充、回归填充等等,个人在使用过程中暂时没有过多采用其他复杂的方法,而是把更多工作放到特征提取和模型构建当中。
  • 填充过程中也可考虑特征之间的相关性,根据强相关性的其他特征来填充缺失特征值,需要具体情况具体分析了。
  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值