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

目录

缺失值处理

删除缺失值

插补缺失值

不处理缺失值

重复值处理

异常值处理

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

删除异常值

视为缺失值后进行插补

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/475571.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode 743. 网络延迟时间(最短路径)

文章目录1. 题目2. 解题2.1 弗洛伊德1. 题目 有 N 个网络节点&#xff0c;标记为 1 到 N。 给定一个列表 times&#xff0c;表示信号经过有向边的传递时间。 times[i] (u, v, w)&#xff0c;其中 u 是源节点&#xff0c;v 是目标节点&#xff0c; w 是一个信号从源节点传递到…

逻辑回归 - sklearn (LR、LRCV、MLP、RLR)- Python代码实现

目录 LR&#xff08;LogisticRegression&#xff09; - 线性回归 LRCV&#xff08;LogisticRegressionCV &#xff09;- 逻辑回归 MLP&#xff08;MLPRegressor&#xff09; - 人工神经网络 RLR&#xff08;RandomizedLogisticRegression&#xff09;-随机逻辑回归 logisti…

轻松看懂机器学习十大常用算法 - 基础知识

通过本篇文章可以对机器学习ML的常用算法有个常识性的认识&#xff0c;没有代码&#xff0c;没有复杂的理论推导&#xff0c;就是图解一下&#xff0c;知道这些算法是什么&#xff0c;它们是怎么应用的&#xff0c;例子主要是分类问题。 算法如下&#xff1a; 决策树随机森林算…

数据离散化 - 等宽等频聚类离散 - Python代码

目录 等宽离散 等频离散 聚类离散 附录&#xff1a; rolling_mean函数解释 cut函数解释 其他数据预处理方法 一些数据挖掘算法中&#xff0c;特别是某些分类算法&#xff08;eg:ID3算法、Aprioroi算法等&#xff09;&#xff0c;要求数据是分类属性形式。因此常常需要将…

LeetCode 1444. 切披萨的方案数(DP)

1. 题目 给你一个 rows x cols 大小的矩形披萨和一个整数 k &#xff0c;矩形包含两种字符&#xff1a; ‘A’ &#xff08;表示苹果&#xff09;和 ‘.’ &#xff08;表示空白格子&#xff09;。 你需要切披萨 k-1 次&#xff0c;得到 k 块披萨并送给别人。 切披萨的每一刀…

获取数据 - 将Excel文件读入矩阵matrix中 - Python代码

机器学习中&#xff0c;很多算法的计算逻辑是基于数学的&#xff0c;免不了求特征值和特征向量这种事情&#xff0c;因此&#xff0c;在数据预处理的时候&#xff0c;将数据源中的数据转储成矩阵格式是很有必要的。 原数据&#xff1a; 代码&#xff1a; import numpy as np…

Visual Studio 2010 调试 C 语言程序

转&#xff1a;http://woyouxian.net/c/using_visual_studio_write_pure_ansi_c_program.html 本篇文章讲述如何用微软的 Visual Studio 编写纯C语言程序&#xff0c;这里的纯C语言&#xff0c;指的是 ANSI C 语言。 要在 Visual Studio 里创建一个 ANSI C语言程序&#xff0c;…

Silverlight 4之旅(三)数据绑定(中)

在上篇文章中我们已经看过了绑定的基础知识&#xff0c;以及绑定数据源的选择问题。在本篇文章中我们看下绑定时Target的现实的问题。 自定义显示 很多时候我们的DataSource存储的数据并不可以直接用来显示&#xff0c;比如说我们对于Bool类型&#xff0c;需要显示为“是”或则…

LeetCode 第 28 场双周赛(505/2144,前23.6%)

文章目录1. 比赛结果2. 题目1. LeetCode 5420. 商品折扣后的最终价格 easy2. LeetCode 5422. 子矩形查询 medium3. LeetCode 5423. 找两个和为目标值且不重叠的子数组 medium4. LeetCode 5421. 安排邮筒 hard1. 比赛结果 两题选手&#x1f602;&#xff0c;前两题很水&#xf…

决策树模型 - (ID3算法、C4.5算法) - Python代码实现

目录 算法简介 信息熵(Entropy) 信息增益(Information gain) - ID3算法 信息增益率(gain ratio) - C4.5算法 源数据 代码实现 - ID3算法 代码实现 - C4.5算法 画决策树代码-treePlotter 算法简介 决策数(Decision Tree)在机器学习中也是比较常见的一种算法&#xff0c…

重复值处理 - 清洗 DataFrame 中的各种重复类型 - Python代码

目录 所有列是否完全重复 指定某一列是否重复 根据多列判断是否重复&#xff0c;防止误删数据 其他数据预处理方法 通过八爪鱼或者火车头等采集器从全网抓取的数据中&#xff0c;总会存在各种各样的重复数据&#xff0c;为保证数据在使用过程中的准确性&#xff0c;总要先进…

Silverlight带关闭动画的内容控件,可移动的内容控件(一)

本例给大家介绍两个自定义控件&#xff0c;一个有显示和关闭两种状态&#xff0c;在状态切换时有动画效果。另外一个是可以拖动的内容控件&#xff0c;可以制作能拖动的面板。 A&#xff0e;带关闭动画的内容控件。 .xaml View Code <ResourceDictionary xmlns"htt…

Autodesk云计算系列视频 --- 云计算与Civil 3D

前面的视频介绍了云计算与AutoCAD/Revit/Inventor的结合&#xff0c;这一节是云计算与Civil 3D的结合例子&#xff1a; 演示中使用的云计算程序源代码可以从下面链接下载&#xff1a; The sample code used in the demonstration is available here. 转载于:https://www.cnblo…

模型评价 - 机器学习与建模中怎么克服过拟合问题?

上一篇博客链接&#xff1a; 机器学习与建模中 - 判断数据模型拟合效果的三种方法 在上一篇博客中&#xff0c;我们谈到了使用损失函数来判断模型的拟合效果。但是拟合效果比较好的模型不一定是最好的模型&#xff0c;建模的最终目的是为了预测&#xff0c;因此预测最精准的模…

因子分析模型

主成分分析和因子分析 #包载入 library(corrplot) library(psych) library(GPArotation) library(nFactors) library(gplots) library(RColorBrewer)1234567 主成分分析 主成分分析&#xff08;PCA&#xff09;是对针对大量相关变量提取获得很少的一组不相关的变量&#xff…

因子分析模型 - 案例按步骤详解 - (SPSS建模)

一、SPSS中的因子分析。 步骤: &#xff08;1&#xff09;定义变量&#xff1a;x1-财政用于农业的支出的比重,x2-第二、三产业从业人数占全社会从业人数的比重&#xff0c;x3-非农村人口比重&#xff0c;x4-乡村从业人员占农村人口的比重&#xff0c;x5-农业总产值占农林牧总…

神经网络 - 用单层感知器实现多个神经元的分类 - (Matlab建模)

训练样本矩阵&#xff1a; P [0.1 0.7 0.8 0.8 1.0 0.3 0.0 –0.3 –0.5 –1.5; 1.2 1.8 1.6 0.6 0.8 0.5 0.2 0.8 –1.5 –1.3]; 训练样本对应的分类&#xff1a; T [1 1 1 0 0 1 1 1 0 0 ;0 0 0 0 0 1 1 1 1 1]; 用MATLAB实现分类&…

缺失值处理 - 定位空值并用空值的上一个值填充 - (Excel)

今天小助理很烦恼&#xff0c;说要处理一批汇率的数据&#xff0c;用近邻日期的汇率填充汇率为空的日期的汇率&#xff0c;这句话比较拗口&#xff0c;我们用数据解释一下。 比如下表&#xff0c;10月6日和10月8日9日的汇率没有采集到&#xff0c;那么我们就用10月5日的汇率填…

C#开发基础类库

下载地址&#xff1a;http://files.cnblogs.com/dashi/Sxmobi.rar转载于:https://www.cnblogs.com/dashi/archive/2011/09/09/2172506.html

因子分析模型 - 因子分析法原理与代码实现 -(Python,R)

因子分析基本思想 和主成分分析相似&#xff0c;首先从原理上说&#xff0c;主成分分析是试图寻找原有自变量的一个线性组合&#xff0c;取出对线性关系影响较大的原始数据&#xff0c;作为主要成分。 因子分析&#xff0c;是假设所有的自变量可以通过若干个因子&#xff08;中…