一文速学-Pandas异常值检测及处理操作各类方法详解+代码展示

简介: 一文速学-Pandas异常值检测及处理操作各类方法详解+代码展示

前言


使用Pandas进行数据预处理时需要了解Pandas的基础数据结构Series和DataFrame。若是还不清楚的可以再去看看我之前的三篇博客详细介绍这两种数据结构的处理方法:


一文速学-数据分析之Pandas数据结构和基本操作代码


DataFrame行列表查询操作详解+代码实战


DataFrame多表合并拼接函数concat、merge参数详解+代码操作展示


以上三篇均为基础知识,没有比较难的实战,比较容易学会。


首先说明一点,关于包含在异常值里面的空值和重复值均有两篇博客专门详细介绍了处理他们的方法:


一文速学-Pandas处理重复值操作各类方法详解+代码展示


一文速学-Pandas处理缺失值操作各类方法详解


该篇博客主要详解异常值检测方法以及检测后的修改方法。


此篇博客基于Jupyter之上进行演示,本篇博客的愿景是希望我或者读者通过阅读这篇博客能够学会方法并能实际运用,而且能够记录到你的思想之中。希望读者看完能够提出错误或者看法,博主会长期维护博客做及时更新。纯分享,希望大家喜欢。


为方便展示效果创建一个DataFrame:


data = {'name': ['user1', 'user2', 'user3', 'user4','user5','user6','user7','user8','user9','user10'],
        'old': [21, 21, 20, 19, 23,22,18,19,35,4],
        'weight':[121,122,132,135,128,124,129,133,162,73]
        }
columns1=['name', 'old','weight']
index1=['id1', 'id2', 'id3','id4','id5','id6','id7','id8','id9','id10']
df1= pd.DataFrame(data,columns=columns1,index=index1)
df1

9b119e1e975e4ddf98689b3ddcadc303.png

异常值检测目前有四种比较常见的处理方法:

MAD异常值识别

百分位异常值识别

3sigma异常值识别

Z-Score异常值识别


1.MAD异常值识别法


MAD的全称为median absolute deviation,意为绝对中位差。MAD是一种采用计算各观测值与平均值的距离总和的检测离群值的方法。


其MAD计算公式为gif.gif


例如如果我们想检测old特征这一列的数据时,运用MAD检测方法可以分为六步进行:

第一步:得到该列的中位数MA:


x=df1['old'].median()


20.5


第二步:让该列的数据减去中位数


Se=df1['old']-x


4c3c270a6a514f8e9e96ef0d81f86bbd.png

第三步:得到该列的绝对值


Se=abs(Se)


994c19a545f246b789acab5decbc3cd6.png

第四步: 求出绝对值化后的此列的中位数MC


MC=Se.median()


1.5


第五步:将MC转化为MAD,MAD=MC*1.4826


MAD=MC*1.4826


第六步:使用初始列的中位数加减MAD的倍数:gif.gif,一般倍数为2.5,超出此范围的数值被认为是异常值。


Low=x-2.5*MAD
Up=x+2.5*MAD
df1=df1[(df1['old']>=Low)&(df1['old']<=Up)]
df1


0372dfac038840a4b12a97fa789fde8c.png

这样就筛选完成,把所有的异常值去除了。  

总体代码为:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
data = {'name': ['user1', 'user2', 'user3', 'user4','user5','user6','user7','user8','user9','user10'],
        'old': [21, 21, 20, 19, 23,22,18,19,35,4],
        'weight':[121,122,132,135,128,124,129,133,162,73]
        }
columns1=['name', 'old','weight']
index1=['id1', 'id2', 'id3','id4','id5','id6','id7','id8','id9','id10']
df1= pd.DataFrame(data,columns=columns1,index=index1)
MA=df1['old'].median()
Se=df1['old']-MA
Se=abs(Se)
MC=Se.median()
Low=x-2.5*MAD
Up=x+2.5*MAD
df1=df1[(df1['old']>=Low)&(df1['old']<=Up)]


二、Z-score异常值识别


Z-score是一维或低维特征空间中的参数异常检测方法。该技术假定数据服从高斯分布,异常值是分布尾部的数据点,因此远离数据的平均值。该方法也可进行数据标准化:


数据预处理归一化详细解释


其公式为gif.gif,距离的远近取决于使用公式计算的归一化数据点gif.gif的设定阈值gif.gif,其中为数据点,gif.gif为特征数据的平均值,gif.gif是特征数据的标准偏差。将所有的数据值经过标准化处理后,判断其绝对值是否大于:gif.gif


目标还是和第一种方法一样删去“old”列中异常值


第一步:对该列进行Z-score标准化:


lamda=df1['old'].mean()
sigma=df1['old'].std()
df1['old']=df1['old'].astype(float)
df1['old']=(df1['old']-lamda)/sigma

040ffa2815994568ba3d27c24ae7aef1.png


第二步:绝对值转换后,根据设定gif.gif进行筛选


df1=df1[df1['old']<1.5]

1387cb9353a64274862cd38e04cb3e36.png

这样既进行了数据标准化也筛选了数据

目录
相关文章
|
1月前
|
机器学习/深度学习 运维 分布式计算
Pandas数据应用:异常检测
本文介绍如何使用Pandas进行异常检测,涵盖异常值定义及其对数据分析的影响。通过简单统计方法(如均值+3标准差)、箱线图法(基于四分位距IQR)和基于密度的方法(如DBSCAN),并提供代码案例。同时,针对数据类型不匹配、缺失值处理不当及大数据量性能问题等常见报错给出解决方案。掌握这些技术有助于提高数据分析的准确性和可靠性。
73 19
|
5月前
|
SQL 索引 Python
Pandas中DataFrame合并的几种方法
Pandas中DataFrame合并的几种方法
437 0
|
3月前
|
Python
通过Pandas库处理股票收盘价数据,识别最近一次死叉后未出现金叉的具体位置的方法
在金融分析领域,&quot;死叉&quot;指的是短期移动平均线(如MA5)下穿长期移动平均线(如MA10),而&quot;金叉&quot;则相反。本文介绍了一种利用Python编程语言,通过Pandas库处理股票收盘价数据,识别最近一次死叉后未出现金叉的具体位置的方法。该方法首先计算两种移动平均线,接着确定它们的交叉点,最后检查并输出最近一次死叉及其后是否形成了金叉。此技术广泛应用于股市趋势分析。
85 2
|
4月前
|
存储 数据采集 数据处理
Pandas中批量转换object至float的高效方法
在数据分析中,常需将Pandas DataFrame中的object类型列转换为float类型以进行数值计算。本文介绍如何使用`pd.to_numeric`函数高效转换,并处理非数字值,包括用0或平均值填充NaN值的方法。
221 1
|
5月前
|
数据处理 Python
Pandas中的drop_duplicates()方法详解
Pandas中的drop_duplicates()方法详解
422 2
|
5月前
|
数据处理 Python
Pandas快速统计重复值的2种方法
Pandas快速统计重复值的2种方法
265 1
|
5月前
|
数据挖掘 Python
掌握Pandas中的相关性分析:corr()方法详解
掌握Pandas中的相关性分析:corr()方法详解
486 0
|
5月前
|
数据处理 索引 Python
Pandas中resample方法:轻松处理时间序列数据
Pandas中resample方法:轻松处理时间序列数据
137 0
|
5月前
|
SQL 数据采集 索引
聚焦Pandas数据合并:掌握merge方法
聚焦Pandas数据合并:掌握merge方法
61 0