目录

缺失值处理

删除缺失值

插补缺失值

不处理缺失值

重复值处理

异常值处理

遍历查找异常值,并根据规则调整大小

删除异常值

视为缺失值后进行插补

数据挖掘过程中,采集的原始数据里存在着各种不利于分析与建模工作的因素,比如数据不完整、数据矛盾、异常值等。这些因素不仅影响建模的执行过程,更有甚者在不知不觉间给出错误的建模结果,这就使得数据清洗显得尤为重要。但是数据清洗并不是数据预处理的全部内容,它只是第一步而已,接下来还有数据集成、数据转换和数据规约等一系列处理。在实际应用中,数据预处理的工作量占整个建模过程的60%,可以说,预处理做得好,模型基本就出来了。

数据预处理的主要内容包括:

  1. 数据清洗;
  2. 数据集成;
  3. 数据转换;
  4. 数据规约;

但是在这一篇里,我们只讲数据清洗,其他部分会慢慢整理。

数据清洗主要是删除原始数据中的无关数据,重复数据,平滑噪声数据,筛选掉与建模目的无关的数据,处理缺失值与异常值等。

缺失值处理

除了很明显的缺失值(单元格处无值)之外,还有一种隐形的缺失值,比如,你要分析一个人从2018年初到现在每个月的收入情况,加入某个月这个人完全没有收入,账单流水中是不会显示这种情况的,如果你想把对这些没有收入的月份进行缺失值处理的话,首先你就要找出哪些月份不在账单流水中。那么请看下面这个链接中的文章吧,文章会给出2018年初到现在连续的日期,你只需要匹配一下就知道哪些月份不在账单中了。

缺失值处理 - 获取一段时间内所有日期的列表 - (Python、MySQL)

处理缺失值的方法分为3类:删除、插补、不处理。

删除缺失值

如果通过删除小部分的数据就可以达到目标,那么这无疑是最简单高效的办法。但是考虑到数据采集的不易,因此一般不会轻易删除数据。

先来看看数据的大致情况

import pandas as pd#读取文件
datafile = u'E:\\pythondata\\tt.xlsx'#文件所在位置
data = pd.read_excel(datafile)#如果是csv文件则用read_csv
print("显示缺失值,缺失则显示为TRUE:\n", data.isnull())#是缺失值返回True,否则范围False
print("---------------------------------\n显示每一列中有多少个缺失值:\n",data.isnull().sum())#返回每列包含的缺失值的个数

运行结果:

显示缺失值,缺失则显示为TRUE:姓名     身高     性别     血型   出生年份     籍贯
0  False  False  False  False  False  False
1  False  False  False  False  False   True
2   True   True   True   True   True   True
3  False  False  False  False  False  False
4  False  False  False  False  False  False
5  False  False  False  False  False  False
6  False   True   True  False   True   True
7  False  False  False  False  False  False
---------------------------------
显示每一列中有多少个缺失值:姓名      1
身高      2
性别      2
血型      1
出生年份    2
籍贯      3
dtype: int64

删除缺失值具体的情况是一下几种:

  • data.dropna() #直接删除含有缺失值的行
  • data.dropna(axis = 1) #直接删除含有缺失值的列
  • data.dropna(how = 'all') #只删除全是缺失值的行
  • data.dropna(thresh = 3) #保留至少有3个非空值的行
  • data.dropna(subset = [u'血型 ']) #判断特定的列,若该列含有缺失值则删除缺失值所在的行

dropna官网介绍文档

插补缺失值

常见的插补方法:

看一眼源数据:

import pandas as pd#读取文件
datafile = u'E:\\pythondata\\ttt.xlsx'#文件所在位置
data = pd.read_excel(datafile)#如果是csv文件则用read_csv
print("显示源数据data:\n", data)#是缺失值返回True,否则范围False
print("------------------\n用均值插补后的数据data:\n", data.fillna(data.mean()))

运行结果:

显示源数据data:姓名       工资
0  张三  11687.0
1  李四  10237.0
2  王五   8971.0
3  赵六   9310.0
4  马七  15890.0
5  杨八      NaN
6  谭九  12361.0
7  黄十   9219.0
------------------
用均值插补后的数据data:姓名            工资
0  张三  11687.000000
1  李四  10237.000000
2  王五   8971.000000
3  赵六   9310.000000
4  马七  15890.000000
5  杨八  11096.428571
6  谭九  12361.000000
7  黄十   9219.000000

简单的缺失值插补方法:

  • data.fillna(data.mean())  #均值插补
  • data.fillna(data.median()) #中位数插补
  • data.fillna(data.mode())  #众数插补
  • data.fillna(data.max())   #最大值插补
  • data.fillna(data.min())   #最小值插补
  • data.fillna(0)         #固定值插补--用0填充
  • data.fillna(5000)       #固定值插补--用已知的行业基本工资填充
  • data.fillna(method='ffill')#最近邻插补--用缺失值的前一个值填充
  • data.fillna(method='pad') #最近邻插补--用缺失值的前一个值填充

通过拟合函数来插补的方法:

主要说一说拉格朗日插值法吧,除了拉格朗日插值法,还有牛顿插值法、Hermite插值法、分段插值法和样条插值法。有兴趣的可以把后几种方法的代码也研究出来。

下面是拉格朗日插值法的博客链接,因为写的很细,所以就不重复了,点击链接跳转去看一看吧。

文章链接:数据预处理 - 缺失值处理 - 拉格朗日插值法

或者,也可以使用缺失值所在行的上一行填补缺失值:

文章链接:缺失值处理 - 定位空值并用空值的上一个值填充 - (Excel)_Not Found黄小包-CSDN博客_excel填充空值

不处理缺失值

不处理就是不管,所以此处省略一万字......

重复值处理

在Pandas中,.duplicated()表示找出重复的行,默认是判断全部列,返回布尔类型的结果。对于完全没有重复的行,返回 False,对于有重复的行,第一次出现的那一行返回 False,其余的返回 True。

与.duplicated()对应的,.drop_duplicates()表示去重,即删除布尔类型为 True的所有行,默认是判断全部列。

import pandas as pd
import numpy as np
from pandas import DataFrame,Series#读取文件
datafile = u'E:\\pythondata\\tt.xlsx'#文件所在位置,u为防止路径中有中文名称,此处没有,可以省略
data = pd.read_excel(datafile)#datafile是excel文件,所以用read_excel,如果是csv文件则用read_csv
examDf = DataFrame(data)#去重
print(examDf.duplicated())#判断是否有重复行,重复的显示为TRUE,
examDf.drop_duplicates()#去掉重复行#指定某列判断是否有重复值
print(examDf.duplicated('name'))#判断name列是否有重复行,重复的显示为TRUE,
examDf.drop_duplicates('name')#去掉重复行#根据多列判断是否有重复值
print(examDf.duplicated(['name','sex','birthday']))#判断name,sex,birthday列是否有重复行,重复的显示为TRUE,
examDf.drop_duplicates(['name','sex','birthday'])#去掉重复行

此处只是放出代码来,若想要了解更多,比如数据源和代码运行结果比较,可点击下面链接查看:

Python数据预处理 - 数据清洗 - 重复值处理

异常值处理

数据清洗过程中的异常值的处理,是选择剔除还是用其他值代替,需要视情况而定。有些异常值可能包含某些信息,需认真思考后采取处理方法。

常见的异常值处理办法:

遍历查找异常值,并根据规则调整大小

文章链接:异常值处理 - iterrows()对 DataFrame 进行遍历,并修改遍历中的异常值 - Python代码

删除异常值

import pandas as pd #导入pandas库inputfile = u'E:\\pythondata\\ttt.xlsx'data= pd.read_excel(inputfile)#将工资低于1000或者高于10万的异常值清空
data[u'工资'][(data[u'工资']<1000) | (data[u'工资']>100000)] = None #清空后删除
print(data.dropna())

视为缺失值后进行插补

#将工资低于1000或者高于10万的异常值清空
data[u'工资'][(data[u'工资']<1000) | (data[u'工资']>100000)] = None #清空后用均值插补
print(data.fillna(data.mean()))

除了用均值插补之外还可以用中位数、众数、最值、固定值、最近邻值、拉格朗日等插值,具体方法往前翻,上面刚写完。

OVER!

Python数据清洗 - 洗什么?怎么洗?看完就明白了相关推荐

  1. python语法基础学习-Python基础语法精心总结!看完都知道的可以往下继续学习了...

    原标题:Python基础语法精心总结!看完都知道的可以往下继续学习了 这应该是最详细的Python入门基础语法总结! 定义变量,使用变量 1. input 用户自己输入值 2. print 打印值 可 ...

  2. python自学攻略-大牛整理!Python学习方法和学习路线,看完茅塞顿开!

    原标题:大牛整理!Python学习方法和学习路线,看完茅塞顿开! Python 是一种极具可读性和通用性的编程语言.Python 这个名字的灵感来自于英国喜剧团体 Monty Python,它的开发团 ...

  3. python学习图解_大牛整理!Python学习方法和学习路线,看完茅塞顿开!

    原标题:大牛整理!Python学习方法和学习路线,看完茅塞顿开! Python 是一种极具可读性和通用性的编程语言.Python 这个名字的灵感来自于英国喜剧团体 Monty Python,它的开发团 ...

  4. python学习-大牛整理!Python学习方法和学习路线,看完茅塞顿开!

    原标题:大牛整理!Python学习方法和学习路线,看完茅塞顿开! Python 是一种极具可读性和通用性的编程语言.Python 这个名字的灵感来自于英国喜剧团体 Monty Python,它的开发团 ...

  5. 不愿意和别人打交道_不想麻烦别人,也不希望别人麻烦我,是什么心理?看完就明白...

    阅读本文前,请您先点击上面的"蓝色字体",再点击"关注",这样您就可以继续免费收到文章了.每天都有分享,完全是免费订阅,请放心关注. 注:本文转载自网络,侵删 ...

  6. 医院计算机管理在品管圈中的应用,品管圈在医院管理中怎么用?看完就明白了...

    原标题:品管圈在医院管理中怎么用?看完就明白了 品管圈(Quality Circle,QCC),又称"质量小组",是一种企业对基层员工的自主管理.全员品管及持续改善最佳的管理活动, ...

  7. android重置系统,安卓手机越用越卡,恢复出厂设置真有用?别瞎搞,看完就明白了!...

    安卓手机越用越卡,恢复出厂设置真有用?别瞎搞,看完就明白了! 现在手机的价格逐渐的开始上升,一部好一点的手机价格还是比较贵的,所以很多人想要节省更多的换机支出,都会想要购买到一款可以使用的比较久的手机 ...

  8. android8卡顿,看完就明白为什么安卓手机卡顿,这个技巧教你解决卡顿

    原标题:看完就明白为什么安卓手机卡顿,这个技巧教你解决卡顿 Android由源代码开放,所以安卓手机拥有更多的黑科技功能.很多安卓用户觉得手机卡顿,其实是没有好好利用这些神奇功能.下面笔者就为大家介绍 ...

  9. 联通鸿蒙卡怎么样,联通腾讯大王卡对比百度大神卡:到底选谁看完就明白了

    联通腾讯大王卡对比百度大神卡:到底选谁看完就明白了最近几个月内,运营商三巨头之一的联通突然宣布与互联网三巨头(百度.阿里.腾讯)合作,推出适用不同消费群体的定制型号卡产品,令人惊喜的是在套餐资费优惠力 ...

  10. 苹果微信王者荣耀哪个服务器人多,王者荣耀:QQ区和微信区哪个玩家多?看完会明白...

    原标题:王者荣耀:QQ区和微信区哪个玩家多?看完会明白 导读:王者荣耀:QQ区和微信区哪个玩家多?看完会明白 文|刺激小宇哥 阅读到这篇文章的各位趣友大家好!游戏无时无刻的丰富着我们的生活,也成为了我 ...

最新文章

  1. [NOI2011]兔兔与蛋蛋游戏 二分图博弈
  2. 单页vue路由router
  3. 机器学习算法之支持向量机 SVM
  4. jQuery ligerUI中通过ligerDateEditor设置默认日期
  5. django框架之中间件 Auth模块
  6. oracle连接eclipse的包,【求助】eclipse导入了Oracle的驱动包连不上Oracle
  7. idea maven 删除dependencies_使用IDEA创建Maven工程 创建javase工程
  8. 【笔试/面试】—— linux(rpm)
  9. Ionic 开发环境搭建
  10. Python分词及词性划分
  11. WPF实例系列一:登录、注册界面设计
  12. win10如何打开摄像头_如何解决:Win10打开软件报错“应用程序无法正常启动 0xc0150002”...
  13. 在超市使用室内地图的5个好处
  14. png图片转化为ico图标并保留透明背景方法
  15. 2021年安徽高考成绩排名查询,安徽高考排名对应大学-安徽高考位次查询(2021年文科参考)...
  16. Shell---函数
  17. sqrt函数模拟实现的两种方法
  18. sqlmap--分析---less-1
  19. Creo/Proe草图无法标注尺寸怎么办?
  20. 【高光谱图像:通过空间-光谱进行重建】

热门文章

  1. 【转】JMeter学习(十三)分布式部署
  2. Yslow-23条规则
  3. java微信学习 接入
  4. 根据XML更新Userprofile
  5. tcl/tk demo
  6. linux下ftp服务器的搭建
  7. CMakeList.txt中设置一个可变的变量的值(bool)
  8. c++并发编程之原子操作的实现原理
  9. Linux下共享内存的查看和释放
  10. 一个从华为离职的朋友