常见的数据异常值有空值、重复值、经验异常值、分布异常值等。下面分别讨论通过Pandas的一般处理方式。

1.空值处理

dfOut[1]: 商品名称  地区    销量
0  李老吉  北京  10.0
1  娃啥啥  上海  13.0
2  康帅傅  广州   NaN

(1)判断空值

df.isna()
Out[2]: 商品名称     地区     销量
0  False  False  False
1  False  False  False
2  False  False   True

(2)判断一列是否全为空

dfOut[1]: name  age
0  bob   NaN
1  tim   NaN
2  lucy  NaN

默认是对所有列进行判断,也可先选择列再进行判断

df.isna().all()Out[2]:
name   age
False  True

(3)df.isna和df.isnull

有说这个设计是借鉴R语言,na和null是两个不同对象。而再python里,pandas是基于numpy实现的。numpy的空值就只有一个np.nan,因此这两个是一样的,因为两个方法也是一样的。查看源码也可验证

(4)丢弃空值

参数解释:表示在行的方向上,只要有一个空值则舍弃这一行数据。如果只想删除全为空的行,则传入how='all'。默认原df不会改变,可使用新的变量接收返回值。inplace=True表示原df改变。

df.dropna(axis=0, how='any', inplace=True)
Out[3]: 商品名称  地区    销量
0  李老吉  北京  10.0
1  娃啥啥  上海  13.0

(5)填充空值

①使用一个固定值填充

# 空值填充为0
df.fillna(0)
Out[4]: 商品名称  地区    销量
0  李老吉  北京  10.0
1  娃啥啥  上海  13.0
2  康帅傅  广州   0.0

②向前或向后填充

一般针对时序数据,且某一刻数据和前后时刻差别不大

df ut[1]: 时间   温度
0  00:00  5.0
1  00:10  4.9
2  00:20  NaN
3  00:30  4.7# 向前填充,即复制上一个数据;bfill为向后填充;也可以直接使用df.ffill()
# limit=1表示只填充一个空值
df.fillna(method='ffill', limit=1)
Out[2]: 时间   温度
0  00:00  5.0
1  00:10  4.9
2  00:20  4.9
3  00:30  4.7

③使用整体数据的均值、最值等填充

df.fillna(df['温度'].mean())Out[3]: 时间        温度
0  00:00  5.000000
1  00:10  4.900000
2  00:20  4.866667
3  00:30  4.700000

2.重复值处理

(1)判断重复行

可以看到,第二次出现的重复行会被标记为True

dfOut[1]: 商品名称  地区  销量
0  李老吉  北京  15
1  娃啥啥  上海  13
2  康帅傅  广州  28
3  娃啥啥  上海  13df.duplicated()Out[2]:
0    False
1    False
2    False
3     True

(2)删除重复行

df.drop_duplicates()Out[1]: 商品名称  地区  销量
0  李老吉  北京  15
1  娃啥啥  上海  13
2  康帅傅  广州  28

默认是,当这一行与前面某一行所有元素都重复才删除。否则,需要指定判断重复的标志列。默认保留第一行重复值,也可指定保留最后一行。

df.drop_duplicates(['商品名称'], keep='last')Out[2]: 商品名称  地区  销量
0  李老吉  北京  15
2  康帅傅  广州  28
3  娃啥啥  上海  13

3.经验异常值处理

经验指的是行业经验,即要结合具体业务。还是以气温为例子。放在全球来讲,气温最高也就50左右。那么可以简单认为超过60的气温数据就是异常。结合上一章讲的数据过滤即可实现。

dfOut[1]: 城市  温度
0   北京  -5
1   上海   5
2   广州  15
3  基加利  75# 只选择温度小于60的
df[df['温度']<60]Out[2]: 城市  温度
0  北京  -5
1  上海   5
2  广州  15

4.分布异常

这是我自己定义的一个概念,类似离群点的概念。即某几个数据和整体数据距离较远。且往往这几个数据没有明显偏离经验值。所以不能通过上面的方法筛选。实现方法:针对高维数据,可以使用离群算法;针对某一维数据,可以直接使用四分位数的概念。

# 温度整体在-5℃左右,因此5℃将会被剔除
df = pd.DataFrame({'时间': ['00:00', '00:10', '00:20', '00:30', '00:40', '00:50', '01:00', '01:20'],'温度': [-5, -6, -7, -6, -5, -4, 5, -4]})
# 上四分位数
up_q = df['温度'].quantile(0.75)
# 下四分位数
low_q = df['温度'].quantile(0.25)
# k=1.5是个经验值,根据整体数据的离散程度调节。一般范围[1.5, 3)
dis = 1.5*(up_q - low_q)
# 上边界
up_limit = up_q + dis
# 下边界
low_limit = low_q - dis
print(df[df['温度'] < up_limit][df['温度'] > low_limit])# 输出:时间  温度
0  00:00  -5
1  00:10  -6
2  00:20  -7
3  00:30  -6
4  00:40  -5
5  00:50  -4
7  01:20  -4

5.替换异常值

其实,前面讲的向前、向后填充也算是一种替换。不过,Pandas还提供了其他替换方式。

(1)通过df.replace

df
Out[1]: 商品名称  地区    销量
0  李老吉  北京  15.0
1  娃啥啥  上海  13.0
2  康帅傅  广州  28.0
3  娃啥啥  上海   NaN# 空值替换为0
df.replace(np.nan, 0)
Out[2]: 商品名称  地区    销量
0  李老吉  北京  15.0
1  娃啥啥  上海  13.0
2  康帅傅  广州  28.0
3  娃啥啥  上海   0.0

如果想对不同的异常值进行不同的替换,只需传入两个列表,替换前后元素做好对应

df
Out[1]: 商品名称  地区    销量
0  李老吉  北京   0.0
1  娃啥啥  上海  13.0
2  康帅傅  广州  28.0
3  娃啥啥  上海   NaN# 0替换为-1;空值替换为-2
df.replace([0, np.nan], [-1, -2])
Out[2]: 商品名称  地区    销量
0  李老吉  北京  -1.0
1  娃啥啥  上海  13.0
2  康帅傅  广州  28.0
3  娃啥啥  上海  -2.0

(2) 通过筛选赋值

df = pd.DataFrame({'商品名称': ['李老吉', '娃啥啥', '康帅傅', '娃啥啥'],'地区': ['北京', '上海', '广州', '上海'],'销量': [28, 13, 28, 99]})
# 将销量大于50的替换为50
df['销量'][df['销量']>50] = 50
df
Out[2]: 商品名称  地区  销量
0  李老吉  北京  28
1  娃啥啥  上海  13
2  康帅傅  广州  28
3  娃啥啥  上海  50

Pandas 异常值处理相关推荐

  1. 数据分析——使用pandas进行数据处理

    使用pandas进行数据处理 概念介绍 pandas模块介绍 Series和DataFrame Series简介 DataFrame简介 DataFrame的常用属性方法 创建DataFrame Da ...

  2. pandas数据清洗(缺失值、异常值和重复值处理)

    1. 缺失值处理 处理方式: 直接删除 填充缺失值 真值转换法 不处理  ( 数据分析和建模应用中很多模型对于缺失值有容忍度或灵活的处理方法,因此在预处理阶段可以不做处理.常见的能够自动处理缺失值的模 ...

  3. pandas笔记(3)——DataFrame数据查看,缺失值,异常值,重复值预处理

    数据情况查看 预览数据前n行 Python中预览数据可以使用head()函数,该函数默认展示前5行. # 查看数据前2行 df.head(2) 查看数据末尾n行 可以使用tail()函数,查看数据末尾 ...

  4. python-数据分析-(12)pandas数据清洗、缺失值、重复值、异常值处理常见方法

    一.导入模块 import pandas as pd from scipy.interpolate import interp1d 二.读取excel文件 data=pd.read_excel(r'E ...

  5. pandas在数据分析(异常值识别问题)中的应用,以衍生特征计算为例(含2022年全国服务外包大赛实例)

      我们以2022年全国服务外包大赛的A03题目作为示例代码演示衍生特征计算过程.   问题的主要任务时找出商品的销量异常和价格异常,提供4个月的商品信息数据,共1700万余条,4个月的店铺信息数据, ...

  6. Pandas[加深学习]06去重、映射、异常值检测和过滤、排序、聚合

    1.删除重复元素 In [1]: import numpy as np import pandas as pd from pandas import Series,DataFrame In [2]: ...

  7. Python数据挖掘:数据探索,数据清洗,异常值处理

    来源:天善智能韦玮老师 课堂笔记 作者:Dust 探索性数据分析Exploratory Data Analysis,EDA 数据探索的核心是︰ 1.数据质量分析(跟数据清洗密切联系) 2.数据特征分析 ...

  8. Pandas入门教程

    pandas是基于NumPy的一种数据分析工具,在机器学习任务中,我们首先需要对数据进行清洗和编辑等工作,pandas库大大简化了我们的工作量,熟练并掌握pandas常规用法是正确构建机器学习模型的第 ...

  9. python可视化脉搏和血氧数据并通过阈值动态调整、动态可视化异常值

    python可视化脉搏和血氧数据并通过阈值动态调整.动态可视化异常值的情况 # 导入基础库和包: import sys import os import pandas as pd import num ...

最新文章

  1. 优酷蓝鲸近千节点的Redis集群运维经验总结
  2. Linux 查看CPU信息,内存等信息
  3. 高精度加减乘法小程序
  4. Linux下nautilus的右键快捷菜单项设置
  5. png转iconfont_IconFont|阿里巴巴矢量图标库
  6. 关于英文论文写作的初步总结和资料推荐
  7. Emule服务器与设置
  8. 故障诊断——奇异值分解法hankel矩阵
  9. 将ipad作为Windows10系统的的扩展显示屏
  10. java生成大小写字母加数字的随机数
  11. 数据结构与算法综合实验——队列实现停车场管理系统
  12. vue点击按钮打开新页签,并传参
  13. 开显卡硬件加速和不开的区别
  14. 面试之站在面试官的角度去面试
  15. 从概念到现状,一文读懂边缘计算
  16. 让 Ubuntu 桌面自动更换壁纸
  17. Linux中ifconfig命令失效
  18. 飞机大战java_java 射击游戏(飞机大战)
  19. 苹果iOS4被开发者做成 App
  20. linux文件比较脚本,shell脚本之对比不同目录的下的文件

热门文章

  1. 密码经济:比互联网经济更加安全、高效、自由的数字经济
  2. 淘宝双十一的深度召回框架
  3. tfboys的歌用计算机怎么弹,TFBOYS用歌词告白:王俊凯一开口,王源和千玺就知道怎么接,默契...
  4. 免费路由器操作系统大汇总
  5. BP神经网络算法基本原理,bp神经网络简单实例
  6. 【MicroPython ESP32】读取esp32内部霍尔传感器数据
  7. Ignition Perspective Design Tips
  8. 压缩解压函数实现(转)
  9. 云计算最佳实践系列之 K8s集群搭建+容器编排
  10. java实现中国象棋5:代码合集