前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【python】数据挖掘分析清洗——缺失值处理方法汇总

【python】数据挖掘分析清洗——缺失值处理方法汇总

原创
作者头像
用户10828570
修改2023-11-07 16:52:18
4050
修改2023-11-07 16:52:18
举报
文章被收录于专栏:blankxxc数据挖掘

前言

看了下网络上做完整的数据清洗方法总结的人不多,这几年刚好学的各类方法都有点杂乱,因此自己做个总结,算是方便自己,也帮助别人,也希望大家看到错误,能在评论区或者私信说一下,互相探讨学习一下。

一、查看缺失值比例

常见的查看缺失值方法,第一种计算缺失值比例

代码语言:python
代码运行次数:0
复制
queshi_bili=((data_train.isnull().sum())/data_train.shape[0]).sort_values(ascending=False).map(lambda x:"{:.2%}".format(x)) #queshibili是数据名 data_train是训练集数据
queshi_bili

第二种是使用describe()函数

代码语言:python
代码运行次数:0
复制
data_train.describe()

二、基于统计的缺失值处理方法

缺失值的处理方法我一般分为两种,一种是基于统计学的填补方法,另外一种是基于机器学习的填补方法。 后续以data_train当中的 其他流动资产这个特征为例

2.1 删除

一些缺失值比例过大的数据还是需要将其删除的,缺失值填补也仅仅只是基于当前数据进行预测,计算的,存在一定误差。但填补的数据过多,反而只会带来误差。

代码语言:python
代码运行次数:0
复制
del data['列名']

按照比例进行删除,这里是按照80%的比例进行删除

代码语言:python
代码运行次数:0
复制
t = int(0.8*data_train.shape[0]) # 确定删除的比例下,占数据多少
data_train_shanchu = data_train.dropna(thresh=t,axis=1)#保留至少有 t 个非空的列
data_train_shanchu

2.2 填充固定值

将缺失值都填充为给定常数

代码语言:python
代码运行次数:0
复制
data.fillna(0, inplace=True) # 填充 0 第一个参数控制填充的常数

也可以通过字典的形式,进行固定值填充,所给字典不够填充的,就还是处于缺失值状态

代码语言:python
代码运行次数:0
复制
data.fillna({0:1000, 1:100, 2:0, 4:5}) 

2.3 填充中位数、平均数、众数

这三个数代码相近,只需要将函数改为其他的即可。图片是以平均数填充为例

代码语言:python
代码运行次数:0
复制
data.fillna(data.mean(),inplace=True) # 填充均值
data.fillna(data.median(),inplace=True) # 填充中位数
data.fillna(data.mode(),inplace=True) # 填充众数

2.4 插值法填充,前值或者后值填充

插值法原理是将缺失值的数据的上下两个数据相加除以2,也就是取平均,缺点是如果前面没有值和后面没有值,都将会导致缺失值依然存在。

代码语言:python
代码运行次数:0
复制
data = data.interpolate()#上下两个数据的均值进

填充前面值或者后面值,填充缺失值的上一个数据或者下一个数据,缺点与插值法相同,缺点是如果前面没有值和后面没有值,都将会导致缺失值依然存在。(图片以前值为例)

代码语言:python
代码运行次数:0
复制
data.fillna(method='pad', inplace=True) # 填充前一条数据的值,但是前一条也不一定有值
data.fillna(method='bfill', inplace=True) # 填充后一条数据的值,但是后一条也不一定有值

三、基于机器学习的缺失值填充

采用的机器学习算法对于缺失值进行填充,从精度上是优于统计方法的填充,但是相对的需要付出的算力和时间是远远大于统计方法的。 这里仅仅对代码实现作为一个演示,其中的算法原理,可以自行搜索。

3.1 基于knn算法进行填充

代码语言:python
代码运行次数:0
复制
from fancyimpute import KNN
data_train_knn = pd.DataFrame(KNN(k=6).fit_transform(data_train_shanchu)#这里的6是对周围6个数据进行欧式距离计算,得出缺失值的结果,可以自行调整
columns=data_train_shanchu.columns)
data_train_knn

3.2 基于随机森林进行填充

使用随机森林进行缺失值填补,其他像lightgbm,xgboost都是可行的,这里以随机森林为例子 操作就是将其他特征作为数据 然后对缺失的数据进行填补,得到缺失值

代码语言:python
代码运行次数:0
复制
from sklearn.ensemble import RandomForestRegressor
#利用随机森林树进行填补缺失值
train_data = train_data[['其他流动资产', '货币资金', '资产总计']]
df_notnull = train_data.loc[(train_data['其他流动资产'].notnull())]
df_isnull = train_data.loc[(train_data['其他流动资产'].isnull())]
X = df_notnull.values[:,1:]
Y = df_notnull.values[:,0]

# use RandomForestRegression to train data
RFR = RandomForestRegressor(n_estimators=1000, n_jobs=-1)
RFR.fit(X,Y)
predict = RFR.predict(df_isnull.values[:,1:])
predict

总结

大概目前的话,常用的缺失值处理方法就这些,后续的话我会接着更新其他的数据清洗的方法。我就不设置付费专栏啦,希望对各位有帮助!

我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!

推荐人: 计算机魔术师

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 一、查看缺失值比例
  • 二、基于统计的缺失值处理方法
    • 2.1 删除
      • 2.2 填充固定值
        • 2.3 填充中位数、平均数、众数
          • 2.4 插值法填充,前值或者后值填充
          • 三、基于机器学习的缺失值填充
            • 3.1 基于knn算法进行填充
              • 3.2 基于随机森林进行填充
              • 总结
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档