编辑推荐:

文章来自于csdn,本文主要讲解python数据预处理中的数据清洗的主要工作:缺失值处理、重复值处理、异常值处理的相关内容,希望对您的学习有所帮助。

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

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

数据清洗;

数据集成;

数据转换;

数据规约;

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

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

缺失值处理

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

处理缺失值的方法分为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'血型 '])?#判断特定的列,若该列含有缺失值则删除缺失值所在的行

插补缺失值

常见的插补方法:

看一眼源数据:

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插值法、分段插值法和样条插值法。有兴趣的可以把后几种方法的代码也研究出来。

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

不处理缺失值

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

重复值处理

在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'])#去掉重复行

此处只是放出代码来.

异常值处理

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

常见的异常值处理办法:

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

删除异常值

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处理数据_Python数据清洗 - 洗什么?怎么洗?看完就明白了相关推荐

  1. java与python难度对比_Python和Java的区别,看完这篇文章你就清楚啦

    众所周知,在数不清的编程语言中Java自诞生之日起长盛不衰,可谓是神话般的存在.随着人工智能时代的到来,Python迅速席卷全球,作为当下最热门的编程语言,因其简单实用且应用场景广泛备受青睐. 一个是 ...

  2. Python数据清洗 - 洗什么?怎么洗?看完就明白了

    目录 缺失值处理 删除缺失值 插补缺失值 不处理缺失值 重复值处理 异常值处理 遍历查找异常值,并根据规则调整大小 删除异常值 视为缺失值后进行插补 数据挖掘过程中,采集的原始数据里存在着各种不利于分 ...

  3. python保存数据_Python 保存数据的方法(4种方法)

    Python 保存数据的方法: open函数保存 使用with open()新建对象 写入数据(这里使用的是爬取豆瓣读书中一本书的豆瓣短评作为例子) import requests from lxml ...

  4. python进阶数据_Python 进阶

    高阶函数 定义 函数接受的参数是一个函数 函数的返回值为一个函数 满足以上2点中其中一个就是高阶函数 函数嵌套 定义 函数中def定义一个函数 嵌套会存在闭包, 其他情况不会有闭包(闭包闭的是变量) ...

  5. python中的点表示什么_Python里面这些点,新手看完之后完全不知道这些点

    原标题:Python里面这些点,新手看完之后完全不知道这些点 Python虽然语法简单,通俗易懂,但是再简单它也是一门语言,就像一棵大树,总有一些树枝是弯弯绕绕的,让新手看完之后一脸懵逼,今天我们就来 ...

  6. python异常值删除_python数据清洗中,是如何识别和处理异常值的?

    异常值处理是pythonshujuqingxi/' style='color:#000;font-size:14px;'>python数据清洗中重要的步骤,虽然异常值出现频率比较低,但是如果置之 ...

  7. python csv 排序_python数据清洗

    python数据清洗 数据排序 import pandas as pa df=pd.DataFrame.sort_values(by,ascending=True,inplace=False) 参数及 ...

  8. python整理数据_Python数据类型整理

    数据类型 什么是数据类型: 首先我们知道变量就是表示事务状态变化的量,那么不同的状态,就要用不同的方式来表示 一.数字类型 1.1什么是数字类型: 即:1,2,1.5这样的叫做数字类型 2.1数字类型 ...

  9. python动态显示数据_python中plot实现即时数据动态显示方法

    在matlab使用plot函数实现数据动态显示方法总结中介绍了两种实现即时数据动态显示的方法.考虑到使用python的人群日益增多,再加上本人最近想使用python动态显示即时的数据,网上方法很少,固 ...

最新文章

  1. 这套“人造肌腱”装备,可保护你的老腰|Science子刊
  2. 移除HTML5 input在type=number时的上下小箭头
  3. linux的常用操作——read函数和write函数
  4. [看书笔记]《深入java虚拟机》——java体系结构(二)
  5. JNI介绍及简单实例
  6. 几种常见的数据库连接的URL写法(包括国产数据达梦DM)
  7. java歌词解析器_设计模式学习(四):基于Builder模式的歌词解析器
  8. 小程序获取用户的openid(详解)
  9. 微信商户中查看 appid
  10. 全面理解搜索Query:当你在搜索引擎中敲下回车后,发生了什么?
  11. 梁宁:增长思维30讲脑图笔记
  12. chisel线网(wire)和寄存器(reg)详解(更新)
  13. 服务器被攻击网站打不开解决方案
  14. 最全Python绘制饼形图(饼状图)
  15. Tomcat传url地址中的特殊字符无法识别问题
  16. STM32F429i disco 体验
  17. JavaScript基础知识快速预览
  18. 六个免费网站统计平台工具对比推荐 你的网站统计用哪个
  19. 2020年3月笔记本选购记录
  20. 软通动力华为java机考题库_软通动力Java考试题库.doc

热门文章

  1. mysql利用cpu率高_MySQL高CPU使用率
  2. VisualStudio opencv配置
  3. arm linux下nginx服务无法正常启动是什么原因?
  4. linux ubuntu16.04 Clion 安装及快捷方式创建
  5. 【深度学习的数学】激活函数的作用是什么?
  6. Test_data detection-Illumination
  7. 【中级软考】什么是非对称加密算法?
  8. StackOverflow How to programmatically unplug replug an arbitrary USB device? 如何以编程方式拔出并重新插入任意USB设备
  9. python numpy数组转换成列表方法 object.tolist()函数
  10. RHCS套件实现高可用负载均衡集群(三)——共享存储