Python常用的数据清洗方法

在数据处理的过程中,一般都需要进行数据的清洗工作,如数据集是否存在重复、是否存在缺失、数据是否具有完整性和一致性、数据中是否存在异常值等。当发现数据中存在如上可能的问题时,都需要有针对性地处理,本文介绍如何识别和处理重复观测、缺失值和异常值。

1.重复观测处理

重复观测是指观测行存在重复的现象,重复观测的存在会影响数据分析和挖掘结果的准确性,所以在数学分析和建模之前,需要进行观测的重复性检验,如果存在重复观测,还需要进行重复项的删除。


检测数据集的是否重复,pandas 使用duplicated方法,该方法返回的是数据行每一行的检验结果,即每一行返回一个bool值,再使用drop_duplicates方法移除重复值。

import pandas as pddataset= pd.read_csv("red_wine_repetition.csv")
print("是否存在重复值:",any(dataset.duplicated()))     #输出:True
dataset.drop_duplicates(inplace=True)dataset.to_csv('red_wine_repetition2.csv',index=False)   #保存移除重复值后的数据集

2.缺失值处理

数据缺失在大部分数据分析应用中都很常见,pandas使用浮点值NaN表示浮点或非浮点数组中的缺失数据,python内置的None值也会被当做缺失值处理。
pandas使用isnull方法检测是否为缺失值,检测对象的每个元素返回一个bool值

from numpy import NaN
from pandas import Seriesdata=Series([5, None, 15, NaN, 25])
print(data.isnull())    #输出每个元素的检测结果
print('是否存在缺失值:',any(data.isnull()))  #输出 :True

缺失值的处理可以采用三种方法:过滤法、填充法和插值法。过滤法又称删除法,是指当缺失的观测比例非常低时(如5%以内),直接删除存在缺失的观测;或者当某变量缺失的观测比例非常高时(如85%以上),直接删除这些缺失的变量。填充法又称替换法,是指用某种常数直接替换那些缺失值,例如:对于连续值变量采用均值或中位数替换,对于离散值变量采用众数替换。插值法是指根据其他非缺失的变量或观测来预测缺失值,常见的插值法有线性插值法、KNN插值法和Lagrange插值法等。

2.1数据过滤

数据过滤dropna 语法格式如下:dropna(axis=0, how='any', thresh=None)
(1)axis=0 表示删除行变量;axis=1 表示删除列变量
(2)how 参数可选值为any或all ,all表删除全为 NaN的行
(3)thresh 为整数类型,表示删除的条件

import pandas as pddataset= pd.read_csv("red_wine_deficiency.csv")
data1=dataset.dropna()  #删除所有的缺失值
data2=dataset.dropna(axis=1, thresh=9)  #删除有效属性小于9的列
data3=dataset.drop("free sulfur dioxide", axis=1)   #删除free sulfur dioxide的数据print(data1,'\n---------------\n',data2,'\n---------------\n',data3)

2.2数据填充

当数据中出现缺失值时,可以用其他的数值进行填充,常用的方法是fillna,其语法格式为:fillna(value=None, method=None, axis=None,inplace=Flase)
其中value值除了基本类型外,还可以使用字典,实现对不同的列填充不同的值,method 表示采用填充数据的方法,常用“ffill”、“bfill”

import pandas as pddataset= pd.read_csv("red_wine_deficiency.csv")
data1=dataset.fillna(0)    #用0填补所有的缺失值
data2=dataset.fillna(method='ffill')      #用前一行的值填补缺失值
data3=dataset.fillna(method='bfill')      #用后一行的值填补缺失值,最后一行缺失不处理
data4=dataset.fillna(value={'pH':dataset.pH.mode()[0],           #使用众数填补'density':dataset.density.mean(),    #使用均值填补'alcohol':dataset.alcohol.median()}) #使用中位数填补print(data1,'\n-----\n',data2,'\n-----\n',data3,'\n-----\n',data4)

2.3插值法

当出现缺失值时,也可以使用插值法来对缺失值进行插补,常见的方法为:'linear','nearest','zero','slinear','quadratic','cubic','spline','barycentric','polynomial'.

import pandas as pddataset= pd.read_csv("red_wine_deficiency.csv")
data=dataset.fillna(value={'pH':dataset.pH.mode()[0],           #使用众数填补'density':dataset.density.interpolate(method='polynomial',order=2),#使用二项式插值填补'alcohol':dataset.alcohol.interpolate()})  #使用线性插值填补
print(data)

3.异常值处理

异常值是指那些远离正常值的观测值,异常值的出现会给模型的常见和预测产生严重的后果,但有时也会利用异常值进行异常数据查找。
对于异常值的检测,一般采用两种方法,一种是标准差法,另一种是箱线图判别法。标准差法的判别公式是outlier > x+nδ 或者outlier < x-nδ,其中x为样本均值,δ为样本标准差。当n=2时,满足条件的观测就是异常值;当n=3时,满足条件的观测就是极端异常值。箱线图的判别公式是outlier > Q3+nIQR 或者outlier < Q1-nIQR,其中Q1为下四分位数,Q3为上四分位数,IQR为上四分位数和下四分位数的差,当n=1.5时,满足条件的观测为异常值,当n=3时,满足条件的观测为极端异常值。
这两种方法的选择标准如下,如果数据近似服从正态分布,因为数据的分布相对比较对称,优先选择标准差法。否则优先选择箱线图法,因为分位数并不会受到极端值的影响。当数据存在异常时,若异常观测的比例不太大,一般可以使用删除法将异常值删除,也可以使用替换法,可以考虑使用低于判别上限的最大值替换上端异常值、高于判别下限的最小值替换下端异常值,或者使用均值、中位数替换

import pandas as pd
import numpy as np
import matplotlib.pyplot as pltdataset= pd.read_csv("red_wine_abnormal.csv")
dataset=dataset['fixed acidity']mu=dataset.mean()      #计算平均值
δ=dataset.std()      #计算标准差
print('标准差法异常值上限检测:',any(dataset > mu+2*δ))    #输出:True
print('标准差法异常值下限检测:',any(dataset < mu-2*δ))    #输出:TrueQ1=dataset.quantile(0.25)    #计算下四分位数
Q3=dataset.quantile(0.75)    #计算上四分位数
IQR=Q3-Q1
print('箱线图法异常值上限检测:',any(dataset > Q3+1.5*IQR))  #输出:True
print('箱线图法异常值下限检测:',any(dataset < Q1-1.5*IQR))  #输出:Trueplt.style.use('ggplot')
dataset.plot(kind='hist',bins=30,density=True)
dataset.plot(kind='kde')
plt.show()#替换异常值
UB=Q3+1.5*IQR
st=dataset[dataset < UB].max()    #找出低于判断上限的最大值
dataset.loc[dataset >UB] = stplt.style.use('ggplot')
dataset.plot(kind='hist',bins=30,density=True)
dataset.plot(kind='kde')
plt.show()

运行不同dataset 得到的图像
(1)异常值处理前

(2)替换异常值后

参考

司守奎,孙玺菁《python数学实验与建模》

Python常用的数据清洗方法相关推荐

  1. 使用python进行数据清洗常用的库_python3常用的数据清洗方法(小结)

    首先载入各种包: import pandas as pd import numpy as np from collections import Counter from sklearn import ...

  2. Python数据清洗 | 常用的数据清洗方法

    常用的数据清洗方法 本文首发于微信公众号<Python希望社>,欢迎关注,完整详细的原文链接请点击这里 在数据处理的过程中,一般都需要进行数据的清洗工作,如数据集是否存在重复.是否存在确实 ...

  3. 光滑噪声数据常用的方法_数据挖掘中常用的数据清洗方法

    是新朋友吗?记得先点蓝字关注我哦- 数据挖掘中 常用的数据清洗方法 在数据挖掘过程中,数据清洗主要根据探索性分析后得到的一些结论入手,然后主要对四类异常数据进行处理,分别是缺失值(missing va ...

  4. 常用的数据清洗方法学习笔记(全面、完整)

    常用的数据清洗方法 在数据处理过程中,一般都需要进行数据的处理工作,如数据集是否存在重复.是否存在缺失.数据是否具有一定的完整性和一致性.数据中是否存在异常值等,当发现数据中可能存在上述问题时,都需要 ...

  5. Python常用的列表方法有哪些?

    Python现在随着人工智能硬件的出现已经成功的成为了IT行业比较热门的岗位了,在这个越来越多的人想要进入的行业里面,怎么样才可以在这个行业做到最好呢?总所周知,IT行业都是一个更新换代比较快的行业的 ...

  6. python常用时间处理方法

    常用时间处理方法 今天 today = datetime.date.today() 昨天 yesterday = today - datetime.timedelta(days=1) 上个月 last ...

  7. 【数据分析】你一定要掌握的Python七种数据清洗方法

    本文链接:https://blog.csdn.net/zw0Pi8G5C1x/article/details/84610050 01 重复值处理 数据录入过程.数据整合过程都可能会产生重复数据,直接删 ...

  8. 光滑噪声数据常用的方法_数据挖掘中常用的数据清洗方法有哪些?

    数据清洗是将重复.多余的数据筛选清除,将缺失的数据补充完整,将错误的数据纠正或者删除,最后整理成为我们可以进一步加工.使用的数据. 所谓的数据清洗,也就是ETL处理,包含抽取Extract.转换Tra ...

  9. 机器学习-数据挖掘中常用的数据清洗方法

    转自:https://blog.csdn.net/jiazericky/article/details/80322225 在数据挖掘过程中,数据清洗主要根据探索性分析后得到的一些结论入手,然后主要对四 ...

最新文章

  1. Delphi - 使用字符串时,一个注意地方
  2. spark scala word2vec 和多层分类感知器在情感分析中的实际应用
  3. sata接口_SATA接口成瓶颈 PCIe硬盘爆发: 群联主控增长120%
  4. 鸿蒙开发-从搭建todolist待办事项来学习组件与js之间的交互
  5. Jquery加载默认值
  6. 推进五通一平:手淘技术三大容器 五大方案首次整体亮相 百川开放升级
  7. 【Python】密码生成器
  8. Android开发-Hello World+phonegap(Cordova)
  9. linux 设备挂载ppt,.linux 挂载各种设备.pdf
  10. Android 程序目录介绍
  11. c语言中运用空语句的延时函数,【转载】单片机C语言中_nop_函数的使用及C语言的延时计算...
  12. 安卓项目连接后台服务器,android云后端服务器
  13. 国军标GJB150A霉菌试验详解
  14. C++与Python混合编程
  15. 超好用的 Windows 效率工具推荐
  16. [渝粤教育] 中山大学 健康评估 参考 资料
  17. div和div之间画横线_HTML在两个div标签中间画一条竖线的方法
  18. 祝大家新春快乐,阖家安康
  19. 平安科技2017笔试题目
  20. 从零开始学统计 07 | 标准误差

热门文章

  1. 《SysML精粹》学习记录--第四章
  2. FLStudio中文全套插件包FL水果20.8中文宿主软件插件
  3. 使Twitter数据对百事可乐和可口可乐进行客户情感分析
  4. java6 官方API中文版
  5. Python——类(class)的定义及使用
  6. ubuntu 18.04 设置开机启动脚本
  7. 【Python自动化Excel】pandas处理Excel的拆分、合并
  8. 【THREE.JS学习(3)】使用THREEJS加载GeoJSON地图数据
  9. h3c服务器r4900清空配置信息,H3C R4900 G3服务器HDM初始化配置
  10. CC2640R2F的各个驱动文件放在哪里比较好