缺失值处理方法汇总

  • 前言
  • 一、查看缺失值比例
  • 二、基于统计的缺失值处理方法
    • 2.1 删除
    • 2.2 填充固定值
    • 2.3 填充中位数、平均数、众数
    • 2.4 插值法填充,前值或者后值填充
  • 三、基于机器学习的缺失值填充
    • 3.1 基于knn算法进行填充
    • 3.2 基于随机森林进行填充
  • 总结

本文链接:https://blog.csdn.net/weixin_47058355/article/details/128866686

前言

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

一、查看缺失值比例

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

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()函数

data_train.describe()

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

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

2.1 删除

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

del data['列名']

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

t = int(0.8*data_train.shape[0]) # 确定删除的比例下,占数据多少
data_train_shanchu = data_train.dropna(thresh=t,axis=1)#保留至少有 t 个非空的列
data_train_shanchu

2.2 填充固定值

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

data.fillna(0, inplace=True) # 填充 0 第一个参数控制填充的常数

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

data.fillna({0:1000, 1:100, 2:0, 4:5})

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

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

data.fillna(data.mean(),inplace=True) # 填充均值
data.fillna(data.median(),inplace=True) # 填充中位数
data.fillna(data.mode(),inplace=True) # 填充众数

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

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

data = data.interpolate()#上下两个数据的均值进

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

data.fillna(method='pad', inplace=True) # 填充前一条数据的值,但是前一条也不一定有值
data.fillna(method='bfill', inplace=True) # 填充后一条数据的值,但是后一条也不一定有值

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

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

3.1 基于knn算法进行填充

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都是可行的,这里以随机森林为例子
操作就是将其他特征作为数据 然后对缺失的数据进行填补,得到缺失值

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

总结

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

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

  1. 用python下载文件的若干种方法汇总

    压缩文件可以直接放到下载器里面下载的 you-get 连接 下载任意文件 重点 用python下载文件的若干种方法汇总 写文章 用python下载文件的若干种方法汇总 zhangqibot发表于Met ...

  2. 网络舆情数据挖掘分析的三点方法和建议

    ​互联网时代,信息数据海量化,要想从浩瀚的网络舆情数据中挖掘出极具价值的信息是个难题.那么,到底舆情数据挖掘分析怎么做?怎样对网络舆情数据进行挖掘分析? 网络舆情数据挖掘分析的三点方法和建议: 1.从 ...

  3. python 下载文件-用python下载文件的若干种方法汇总

    在日常科研或者工作中,我们免不了要批量从网上下载一些资料.要是手工一个个去下载,浪费时间又让鼠标折寿,好不容易点完了发现手指都麻木了. 这种重复性的批量作业我们应该交给python小弟去帮我们搞定,这 ...

  4. 【python】数据挖掘分析清洗——离群点(异常值)处理方法汇总

    目录 前言 一.识别异常值 1.1 箱线图处理异常值 1.2 3α原则 1.3 boxcox 二.异常值处理 2.1 截尾法 2.2 单一变量代替 2.3 用缺失值代替 总结 本文链接:https:/ ...

  5. python中文情感分析分类和英文情感分析的库和方法汇总

    情感分析是自然语言处理中的一个常见任务.以下是用 Python 写的一个简单的情感分析分类函数的代码示例: import jieba import numpy as npdef sentiment_a ...

  6. python做数据分析时缺失值填补、缺失值填充方法汇总

    在我们进行数据分析时,通常会遇到各种数据缺失的情况,针对这种情况我们该如何进行填补呢? 1.人工填补 该方法仅适用于小数据集,受个人因素影响. 2.平均值填补 对某一列的缺失值,采用该列的平均值填充 ...

  7. python怎么读取txt文件并统计其字数-python读写excel等数据文件方法汇总

    python处理数据文件第一步是要读取数据,文件类型主要包括文本文件(csv.txt等).excel文件.数据库文件.api等. 下面整理下python有哪些方式可以读取数据文件. 1. python ...

  8. python数据挖掘分析微信朋友圈(调用itchat库)

    参考https://blog.csdn.net/qinyuanpei/article/details/79360703,基于python3.6实现微信朋友圈性别.地区.个性签名.头像四个维度的分析. ...

  9. Python 中读取和保存图像方法汇总及其区别

    方法一:利用 PIL 中的 Image 函数 这个函数读取出来不是 array 格式,这时候需要用 np.asarray(im) 或者 np.array()函数 .区别:np.array() 是深拷贝 ...

最新文章

  1. saltstack之远程触发文件备份、回滚
  2. H5开发中的问题总结
  3. mel表达式_maya 2012 mel 表达式编辑器
  4. C++ template函数模板
  5. Angularjs 通过asp.net web api认证登录
  6. 基友扫雷通关跟我炫耀!于是用Python自动扫雷程序十秒通关
  7. Python 中xrange和range区别
  8. 使用GDAL对静止卫星圆盘数据进行校正(以FY2为例子)
  9. 力扣题目系列:322. 零钱兑换
  10. 258. Move 0s To The End I -- Laicode
  11. RocketMQ(三)RocketMQ入门样例
  12. nginx源码编译安装及使用
  13. Cisco Packet Tracer思科模拟器交换机的HSRP技术
  14. [Kattis-crisscrosscables] Criss-Cross Cables (贪心+优先队列)
  15. 项目中引入阿里巴巴矢量字体图标库
  16. meshlab调整平行光源
  17. BottomNavigationView修改图标/文字大小,替换图标
  18. Spark 用代码实现求分位数Percentile(Quentile)的方法
  19. 管理 Office com 加载项
  20. [DeeplearningAI笔记]序列模型3.3-3.5集束搜索

热门文章

  1. leetcode怎么用时间刷_大家都是如何刷 LeetCode 的?
  2. 毕业设计 基于stm32与openmv的目标跟踪系统
  3. (一)Activiti 数据库25张表——流程定义表9(ACT_RE_PROCDEF)
  4. TensorFlow 安装 Win10 Python+GPU
  5. 【Django】python后端的POST与GET请求
  6. JPA OneToMany删除子项须知
  7. 帆软报表嵌入python程序_帆软报表开发步骤
  8. mysql同步mongodb_MySQL数据实时增量同步到MongoDB
  9. vue绑定class的几种方式
  10. ZFPlayer视频播放PC 安卓都可以正常 播放,iOS端只有声音没有画面(2)