重复值、异常值、缺失值处理
在数据的录入和处理过程中,不可避免会产生重复值、缺失值及异常值
1、重复值处理
# 重复值处理
import pandas as pd
data = pd.DataFrame([[1,2,3],[1,2,3],[4,5,6]],columns=['c1','c2','c3'])
data
1.1 直接删除
# 1、2行是重复的,使用duplicated()查询重复得内容
print(data[data.duplicated()])
# 计算重复得数量
print(data.duplicated().sum())
# 删除重复的行
data1 = data.drop_duplicates()
data1
1.2 指定变量判断是否删除
# 指定变量判断是否删除
print(data.drop_duplicates(subset=['c1','c3'],keep='first',inplace=False))
# first保留第一个,inplace=True对原始数据修改
# 注意上面删除了重复得行之后,并没有改变原表的结构,所以drop_duplicates()函数并不会改变原表的结构,
# 所以需要重新赋值,或者在其中设置inplace = True
2、缺失值处理
# 1.2缺失值处理
import numpy as np
import pandas as pd
data1 = pd.DataFrame([[1,np.nan,3],[np.nan,2,np.nan],[1,np.nan,0]],columns=['c1','c2','c3'])
data1
# 可以使用isnull()函数或者isna()函数来查看空值
print(data1.isnull())
data1.isna()
# 各变量中缺失值的数量
data1.isnull().sum(axis=0)
# 对单列查看空值
data1['c1'].isnull()
# 如果数据量较大,可以通过如下代码筛选出某列中内容为空值的行
data1[data1['c1'].isnull()]
# 对于空值的处理方式有两种,一种是删除空值,一种是填补空值
# 删除空值
a = data1.dropna()
a
# 也可以对上述函数设置thresh参数,例如将其设置为n,表示如果一行中的非空值少于n个则保留该行
a1 = data1.dropna(thresh=2)
a1
2.1 用0填补缺失值
# 用fillna()填补空值
# 定义缺失值为0
data_null_0 = data1.fillna(0,inplace=False)
print(data_null_0)
2.2 用均值填补
# 用均值填补
b = data1.fillna(data1.mean())
print(b)
2.3 用中位数填补
# 用中位数填补
c = data1.fillna(data1.median())
print(c)
2.4 用空值上方或者下方的值替换
# 用空值上方或下方的值替换空值
d = data1.fillna(method='pad') # pad表示用上方值替换,如果上方不存在或者也是空值,则布替换
print(d)
# 用下方值替换
e = data1.fillna(method='backfill')
print(e)
3、异常值处理
# 异常值处理
import numpy as np
import pandas as pd
data2 = pd.DataFrame({'c1':[3,10,5,7,1,9,69],'c2':[15,16,14,100,19,11,8],'c3':[20,15,18,21,120,27,29]},columns=['c1','c2','c3'])
data2
3.1 利用箱体图检验异常值
# 利用箱体图和标准差来进行异常值检验
import matplotlib.pyplot as plt
plt.grid(True)
plt.boxplot(data2,labels=['c1','c2','c3'],flierprops={"marker": "o", "markerfacecolor": "red", "markersize": 10})
3.2 IQR筛选异常值
# 筛选异常值(IQR)
"""
优点:简单、可解释性强
缺点:鲁棒性差,准确性差,只能剔除明显的异常值
"""
# 算出上届和下界
q1 = data2.quantile(0.25)
q3 = data2.quantile(0.75)
iqr = q3 - q1
bottom = q1 -1.5*iqr # 下界
upper = q3 + 1.5*iqr # 上界
print(bottom)
print(upper)
# 筛选异常值
error = data2[(data2 < bottom) | (data2 > upper)]
print(error)
data = data2[(data2 >= bottom) & (data2 <= upper)]
print('异常值共%i条'%len(error))
data
3.3 利用标准差检验异常值
"""
利用标准差检查,当数据服从标准正态分布时,99.7%的数值距离均值3倍sigma之内,
95.4%的数值距离均值2倍sigma之内,
在3倍sigma之外的值可以认为是异常值,也可以将阈值设置为两个标准差
"""
import numpy as np
import pandas as pd
data2 = pd.DataFrame({'c1':[3,10,5,7,1,9,69],'c2':[15,16,14,100,19,11,8],'c3':[20,15,18,21,120,27,29]},columns=['c1','c2','c3'])
data2
# 判断是否符合正态分布,pvalue大于0.05则认为数据呈正态分布
from scipy import stats
mean = data2['c1'].mean()
std = data2['c1'].std()
print(stats.kstest(data2['c1'],'norm',(mean,std))) # 呈正态分布
columns = ['c1','c2','c3']
for i in columns:mean = data2[i].mean()std = data2[i].std()print(stats.kstest(data2[i],'norm',(mean,std)))
f = pd.DataFrame()
for i in data2.columns:z = (data2[i]-data2[i].mean())/data2[i].std() # 标准化f[i] = abs(z)>2 # abs计算绝对值
f
# 如何处理异常值
"""
1、删除含异常值的记录
2、将异常值视为缺失值
3、数据分箱的方法进行处理
4、插补法
5、不处理
"""
重复值、异常值、缺失值处理相关推荐
- Excel数据处理(缺失值/重复值/异常值/拆分)
6月12日给大家讲解了一下数据获取的东东(时隔略久,忘记的请点击数据获取回顾),时隔一个月,接着我们的 用Excel进行数据分析系列 的第二篇:数据处理.文末有获取本篇实例数据的方法. 目录: 一.缺 ...
- python处理csv中的缺失值_Python中重复值、缺失值、空格值处理
1.重复值处理 把数据结构中,行相同的数据只保留一行. 函数语法: drop_duplicates() 删除重复值newdf=df.drop_duplicates()from pandas impor ...
- python 筛选重复数据和不重复数据_[Python] Pandas 对数据进行查找、替换、筛选、排序、重复值和缺失值处理...
1. 数据文件 2. 读数据 import pandas as pd data = pd.read_csv('D:\git\python\code\第5章\产品统计表.csv') print(data ...
- 数据清理之重复值、缺失值的基本处理方法
文章目录 数据去重 检测缺失值 缺失值的处理 删除 缺失值的填补替换 数据去重 python数据清洗中去重常用drop_duplicates函数,下面是它的参数说明 参数名称 说明 subset 接收 ...
- Pandas数据分析17——pandas数据清洗(缺失值、重复值处理)
参考书目:<深入浅出Pandas:利用Python进行数据处理与分析> pandas对大数据有很多便捷的清洗用法,尤其针对缺失值和重复值.缺失值就不用说了,会影响计算,重复值有时候可能并未 ...
- pandas数据清洗(缺失值、异常值和重复值处理)
1. 缺失值处理 处理方式: 直接删除 填充缺失值 真值转换法 不处理 ( 数据分析和建模应用中很多模型对于缺失值有容忍度或灵活的处理方法,因此在预处理阶段可以不做处理.常见的能够自动处理缺失值的模 ...
- 一文看懂数据清洗:缺失值、异常值和重复值的处理
https://www.toutiao.com/a6711212131125035534/ 导读:在数据清洗过程中,主要处理的是缺失值.异常值和重复值.所谓清洗,是对数据集通过丢弃.填充.替换.去重等 ...
- 机器学习之数据预处理——数据清洗(缺失值、异常值和重复值的处理)
机器学习之数据预处理--数据清洗缺失值.异常值和重复值的处理 基础知识 技术点总结 数据列缺失的处理方法 1.丢弃(缺失值处理) 1.生成一份随机数据 2.查看哪些值缺失 3.获得含有NA的列 4.获 ...
- pandas笔记(3)——DataFrame数据查看,缺失值,异常值,重复值预处理
数据情况查看 预览数据前n行 Python中预览数据可以使用head()函数,该函数默认展示前5行. # 查看数据前2行 df.head(2) 查看数据末尾n行 可以使用tail()函数,查看数据末尾 ...
最新文章
- 指针常量和常量指针简单区分理解
- 【深度学习】NetAug(网络增强)—Dropout的反面
- 记一次某APK的恶意WIFI攻击
- N551JM集显和独显切换
- linux服务器安装caffe(无root权限)
- apscheduler executors
- Android 内部存储安装apk文件实现
- VNPY价差交易模块
- Java语言程序设计(序)
- 3年前的一个小项目经验,分享给菜鸟兄弟们(公文收发小软件:前期需求调查部分)...
- pytorch之---max()函数
- android霓虹灯源代码——基础编
- 正点原子STM32F103(精英版)------STM32时钟系统
- 巧用Procexp找出弹窗广告真凶
- 大数据技术应用需要注意什么?
- w ndows资源管理器无响应,windows资源管理器未响应
- 计算机专业的情书,【实用】大学各专业表白情书,你能看懂几个
- 极限的四则运算和洛必达法则的使用条件
- mgo 多条件联合查询
- qq撤回的消息怎么找回 python_Python实现微信中找回好友、群聊用户撤回的消息功能示例...