做教育机构的设计哪些网站好,学做网站多久能学会,靖边县建设局网站,网站建设认准猪八戒网目录
缺失值处理
删除缺失值
插补缺失值
不处理缺失值
重复值处理
异常值处理
遍历查找异常值#xff0c;并根据规则调整大小
删除异常值
视为缺失值后进行插补
数据挖掘过程中#xff0c;采集的原始数据里存在着各种不利于分析与建模工作的因素#xff0c;比如数…目录
缺失值处理
删除缺失值
插补缺失值
不处理缺失值
重复值处理
异常值处理
遍历查找异常值并根据规则调整大小
删除异常值
视为缺失值后进行插补
数据挖掘过程中采集的原始数据里存在着各种不利于分析与建模工作的因素比如数据不完整、数据矛盾、异常值等。这些因素不仅影响建模的执行过程更有甚者在不知不觉间给出错误的建模结果这就使得数据清洗显得尤为重要。但是数据清洗并不是数据预处理的全部内容它只是第一步而已接下来还有数据集成、数据转换和数据规约等一系列处理。在实际应用中数据预处理的工作量占整个建模过程的60%可以说预处理做得好模型基本就出来了。
数据预处理的主要内容包括
数据清洗数据集成数据转换数据规约
但是在这一篇里我们只讲数据清洗其他部分会慢慢整理。
数据清洗主要是删除原始数据中的无关数据重复数据平滑噪声数据筛选掉与建模目的无关的数据处理缺失值与异常值等。 缺失值处理
除了很明显的缺失值单元格处无值之外还有一种隐形的缺失值比如你要分析一个人从2018年初到现在每个月的收入情况加入某个月这个人完全没有收入账单流水中是不会显示这种情况的如果你想把对这些没有收入的月份进行缺失值处理的话首先你就要找出哪些月份不在账单流水中。那么请看下面这个链接中的文章吧文章会给出2018年初到现在连续的日期你只需要匹配一下就知道哪些月份不在账单中了。
缺失值处理 - 获取一段时间内所有日期的列表 - Python、MySQL
处理缺失值的方法分为3类删除、插补、不处理。
删除缺失值
如果通过删除小部分的数据就可以达到目标那么这无疑是最简单高效的办法。但是考虑到数据采集的不易因此一般不会轻易删除数据。
先来看看数据的大致情况
import pandas as pd#读取文件
datafile uE:\\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 uE:\\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.fillnamethodffill#最近邻插补--用缺失值的前一个值填充data.fillnamethodpad #最近邻插补--用缺失值的前一个值填充
通过拟合函数来插补的方法
主要说一说拉格朗日插值法吧除了拉格朗日插值法还有牛顿插值法、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 uE:\\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 uE:\\pythondata\\ttt.xlsxdata 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!