一文速学-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

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

目录
相关文章
|
6天前
|
数据格式 Python
如何使用Python的Pandas库进行数据透视图(melt/cast)操作?
Pandas的`melt()`和`pivot()`函数用于数据透视。基本步骤:导入pandas,创建DataFrame,然后使用这两个函数转换数据格式。示例代码展示了如何通过`melt()`转为长格式,再用`pivot()`恢复为宽格式。输入数据是包含&#39;Name&#39;和&#39;Age&#39;列的DataFrame,最终结果经过转换后呈现出不同的布局。
46 6
|
6天前
|
人工智能 安全 数据挖掘
Pandas AI:Pandas与人工智能的结合,让你不再拘泥于如何使用pandas方法及处理语法
Pandas AI:Pandas与人工智能的结合,让你不再拘泥于如何使用pandas方法及处理语法
|
6天前
|
Python
使用Python pandas的sort_values()方法可按一个或多个列对DataFrame排序
【5月更文挑战第2天】使用Python pandas的sort_values()方法可按一个或多个列对DataFrame排序。示例代码展示了如何按'Name'和'Age'列排序 DataFrame。先按'Name'排序,再按'Age'排序。sort_values()的by参数接受列名列表,ascending参数控制排序顺序(默认升序),inplace参数决定是否直接修改原DataFrame。
27 1
|
6天前
|
数据可视化 数据挖掘 C++
数据分析综合案例讲解,一文搞懂Numpy,pandas,matplotlib,seaborn技巧方法
数据分析综合案例讲解,一文搞懂Numpy,pandas,matplotlib,seaborn技巧方法
|
6天前
|
索引 Python
如何使用Python的Pandas库进行数据透视表(pivot table)操作?
使用Pandas在Python中创建数据透视表的步骤包括:安装Pandas库,导入它,创建或读取数据(如DataFrame),使用`pd.pivot_table()`指定数据框、行索引、列索引和值,计算聚合函数(如平均分),并可打印或保存结果到文件。这允许对数据进行高效汇总和分析。
11 2
|
6天前
|
存储 数据库连接 数据处理
数据加载与保存:Pandas中的数据输入输出操作
【4月更文挑战第16天】Pandas是Python数据分析的强大工具,支持多种数据加载和保存方法。本文介绍了如何使用Pandas读写CSV和Excel文件,以及与数据库交互。`read_csv`和`to_csv`用于CSV操作,`read_excel`和`to_excel`处理Excel文件,而`read_sql`和`to_sql`则用于数据库的读写。了解这些基本操作能提升数据处理的效率和灵活性。
|
6天前
|
数据处理 Python
使用Pandas解决问题:对比两列数据取最大值的五种方法
​在数据处理和分析中,经常需要比较两个或多个列的值,并取其中的最大值。Pandas库作为Python中数据处理和分析的强大工具,提供了多种灵活的方法来实现这一需求。本文将详细介绍五种使用Pandas对比两列数据并取最大值的方法,通过代码示例和案例分析,帮助新手更好地理解并掌握这些技巧。
31 0
|
6天前
|
数据可视化 Python
如何使用Python的Pandas库进行数据分组和聚合操作?
【2月更文挑战第29天】【2月更文挑战第105篇】如何使用Python的Pandas库进行数据分组和聚合操作?
|
6天前
|
存储 数据可视化 数据挖掘
Pandas 28种常用方法使用总结(下)
Pandas 28种常用方法使用总结
|
6天前
|
数据挖掘 Serverless 数据处理
Pandas 28种常用方法使用总结(上)
Pandas 28种常用方法使用总结