看过来
《pandas 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
箱线图四分位检测异常值(Box Plot Diagram to Identify Outliers),箱型图提供了识别异常值的一个标准,即异常值通常被定义为 小于QL-1.5IQR 或大于 QU+1.5IQR 的值。
在本案例中,我们将用 Pandas 在实现这个检测。关于箱线图四分位检测异常值的原理可浏览《箱线图四分位检测异常值》。
定义一个函数,来对 Series 应用进行检测,将异常值设置为 NaN。
根据公式先求出 q1, q3,再求出 iqr,再利用前边三个值得出上下界。最后对 Series 按条件进行检索,Series 的 mask 可以将满足条件的值设置为 NaN。
最后,我们将此函数应用在所有的数字列上。
import pandas as pd
df = pd.read_csv('https://gairuo.com/file/data/team.csv')
df.head()
'''
name team Q1 Q2 Q3 Q4
0 Liver E 555 21 24 64
1 Arry C 36 888 37 57
2 Ack A 57 60 18 84
3 Eorge C 93 96 71 78
4 Oah D 65 49 61 86
'''
# 构造异常值
df.at[0, 'Q1'] = 555
df.at[1, 'Q2'] = 888
df.at[2, 'Q4'] = -111
# 检测到异常值置为 nan
def box_plot_outliers(s):
q1, q3 = s.quantile(.25), s.quantile(.75)
iqr = q3 - q1
low, up = q1 - 1.5*iqr, q3 + 1.5*iqr
outlier = s.mask((s<low) | (s>up))
return outlier
# 应用
df.head().loc[:, 'Q1':].apply(box_plot_outliers)
'''
Q1 Q2 Q3 Q4
0 NaN 21.0 24.0 64
1 36.0 NaN 37.0 57
2 57.0 60.0 NaN 84
3 93.0 96.0 71.0 78
4 65.0 49.0 61.0 86
'''
(完)
更新时间:2024-08-18 15:41:06 标签:pandas python 异常值 箱线图