pandas异常值检测与处理

2023-11-08

关注公众号FF工作室,回复pandas异常值检测与处理,获取数据
在这里插入图片描述

1、异常值检测
1.1、标准差法
outlier>x¯+nσ或outlier<x¯−nσ

x¯ 为样本均值, σ 为样本标准差 当n=2时,满足条件的观测值就为异常值,当n=3时满足条件的观测就是极端异常值

1.2、箱线图法
outlier>\Q3+nIQR或outlier<\Q1−nIQR

\Q3 为上四分位数(75%), \Q1 为下四分位数(25%), IQR 为上四分位与下四分位的差 当n=1.5时,满足条件的观测值就为异常值,当n=3时满足条件的观测就是极端异常值

2、选择方法
数据近似服从正态分布(数据分布比较对称)优先选择标准差法即1.1 否则选择箱线图法1.2

3、异常值处理
若观测值异常比例不大可以考虑删除 也可以考虑替代法,可以使用低于判别上限的最大值进行替换上端异常值,高于判别下限的最小值替换下端异常值 或使用均值或中位数等

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']    #定义使其正常显示中文字体黑体
plt.rcParams['axes.unicode_minus'] = False      #用来正常显示表示负号 
data = pd.read_excel(r'D:\jupyter\data\全国疫情数据_来自CDC及卫健委.xlsx')
print(data.head())
    date  新增确诊  新增疑似  新增死亡  累积确诊  现有疑似  累积死亡  新增治愈  累积治愈  现有确诊  现有重症

0 2020-01-16 4 0 1 45 0 2 0 8 0 0
1 2020-01-17 17 0 0 62 0 2 0 12 0 0
2 2020-01-18 59 0 1 121 0 3 0 17 0 0
3 2020-01-19 77 0 1 198 0 4 0 18 0 0
4 2020-01-20 77 27 2 291 54 6 0 25 291 0

df = data["累积确诊"]
print(df.head(),"\n")
print(df.describe())

0 45
1 62
2 121
3 198
4 291
Name: 累积确诊, dtype: int64

count 68.000000
mean 52605.897059
std 33092.962085
min 45.000000
25% 16531.250000
50% 74690.000000
75% 80824.500000
max 81747.000000
Name: 累积确诊, dtype: float64

mean_val = df.mean() #均值
std_val = df.std()   #标准差
up = df > mean_val+2*std_val
down = df < mean_val-2*std_val

print(df.loc[up,])
print(df.loc[down,],"\n")
print("标准差法异常值上限检测:\n",up.head(),"\n")
print("标准差法异常值下限检测:\n",down.head())

Series([], Name: 累积确诊, dtype: int64)
Series([], Name: 累积确诊, dtype: int64)

标准差法异常值上限检测:
0 False
1 False
2 False
3 False
4 False
Name: 累积确诊, dtype: bool

标准差法异常值下限检测:
0 False
1 False
2 False
3 False
4 False
Name: 累积确诊, dtype: bool

Q1 = df.quantile(0.25)
Q3 = df.quantile(0.75)
IQR = Q3 - Q1

up1 = df > Q3+1.5*IQR
down1 = df < Q1-1.5*IQR

print(df.loc[up1,])
print(df.loc[down1,],"\n")
print("箱线图法异常值上限检测:\n",up1.head(),"\n")
print("箱线图法异常值下限检测:\n",down1.head())
Series([], Name: 累积确诊, dtype: int64)
Series([], Name: 累积确诊, dtype: int64) 

箱线图法异常值上限检测:
0 False
1 False
2 False
3 False
4 False
Name: 累积确诊, dtype: bool

箱线图法异常值下限检测:
0 False
1 False
2 False
3 False
4 False
Name: 累积确诊, dtype: bool

plt.style.use("ggplot")
plt.rcParams["font.size"]=10 #设置字体大小
plt.boxplot([df,data["新增确诊"]],labels=['累积确诊',"新增确诊"])
plt.title('箱线图')
plt.savefig('gender.png',dpi=400)

在这里插入图片描述
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

pandas异常值检测与处理 的相关文章

  • 如何生成给定范围内的回文数列表?

    假设范围是 1 X 120 这是我尝试过的 gt gt gt def isPalindrome s check if a number is a Palindrome s str s return s s 1 gt gt gt def ge
  • 如何在android上的python kivy中关闭应用程序后使服务继续工作

    我希望我的服务在关闭应用程序后继续工作 但我做不到 我听说我应该使用startForeground 但如何在Python中做到这一点呢 应用程序代码 from kivy app import App from kivy uix floatl
  • 如何等到 Excel 计算公式后再继续 win32com

    我有一个 win32com Python 脚本 它将多个 Excel 文件合并到电子表格中并将其另存为 PDF 现在的工作原理是输出几乎都是 NAME 因为文件是在计算 Excel 文件内容之前输出的 这可能需要一分钟 如何强制工作簿计算值
  • 打破嵌套循环[重复]

    这个问题在这里已经有答案了 有没有比抛出异常更简单的方法来打破嵌套循环 在Perl https en wikipedia org wiki Perl 您可以为每个循环指定标签 并且至少继续一个外循环 for x in range 10 fo
  • __del__ 真的是析构函数吗?

    我主要用 C 做事情 其中 析构函数方法实际上是为了销毁所获取的资源 最近我开始使用python 这真的很有趣而且很棒 我开始了解到它有像java一样的GC 因此 没有过分强调对象所有权 构造和销毁 据我所知 init 方法对我来说在 py
  • keras加载模型错误尝试将包含17层的权重文件加载到0层的模型中

    我目前正在使用 keras 开发 vgg16 模型 我用我的一些图层微调 vgg 模型 拟合我的模型 训练 后 我保存我的模型model save name h5 可以毫无问题地保存 但是 当我尝试使用以下命令重新加载模型时load mod
  • 在循环中每次迭代开始时将变量重新分配给原始值(在循环之前定义)

    在Python中 你使用 在每次迭代开始时将变量重新分配给原始值 在循环之前定义 时 也就是说 original 1D o o o for i in range 0 3 new original 1D revert back to orig
  • 在 NumPy 中获取 ndarray 的索引和值

    我有一个 ndarrayA任意维数N 我想创建一个数组B元组 数组或列表 其中第一个N每个元组中的元素是索引 最后一个元素是该索引的值A 例如 A array 1 2 3 4 5 6 Then B 0 0 1 0 1 2 0 2 3 1 0
  • Python 中的二进制缓冲区

    在Python中你可以使用StringIO https docs python org library struct html用于字符数据的类似文件的缓冲区 内存映射文件 https docs python org library mmap
  • NameError:名称“urllib”未定义”

    CODE import networkx as net from urllib request import urlopen def read lj friends g name fetch the friend list from Liv
  • 在pyyaml中表示具有相同基类的不同类的实例

    我有一些单元测试集 希望将每个测试运行的结果存储为 YAML 文件以供进一步分析 YAML 格式的转储数据在几个方面满足我的需求 但测试属于不同的套装 结果有不同的父类 这是我所拥有的示例 gt gt gt rz shorthand for
  • Abaqus 将曲面转化为集合

    我一直试图在模型中找到两个表面的中心 参见照片 但未能成功 它们是元素表面 面 查询中没有选项可以查找元素表面的中心 只能查找元素集的中心 找到节点集的中心也很好 但是我的节点集没有出现在工具 gt 查询 gt 质量属性选项中 而且我找不到
  • Pandas Dataframe 中 bool 值的条件前向填充

    问题 如何转发 fill boolTruepandas 数据框中的值 如果是当天的第一个条目 True 到一天结束时 请参阅以下示例和所需的输出 Data import pandas as pd import numpy as np df
  • 当玩家触摸屏幕一侧时,如何让 pygame 发出警告?

    我使用 pygame 创建了一个游戏 当玩家触摸屏幕一侧时 我想让 pygame 给出类似 你不能触摸屏幕两侧 的错误 我尝试在互联网上搜索 但没有找到任何好的结果 我想过在屏幕外添加一个方块 当玩家触摸该方块时 它会发出警告 但这花了很长
  • 循环中断打破tqdm

    下面的简单代码使用tqdm https github com tqdm tqdm在循环迭代时显示进度条 import tqdm for f in tqdm tqdm range 100000000 if f gt 100000000 4 b
  • 通过数据框与函数进行交互

    如果我有这样的日期框架 氮 EG 00 04 NEG 04 08 NEG 08 12 NEG 12 16 NEG 16 20 NEG 20 24 datum von 2017 10 12 21 69 15 36 0 87 1 42 0 76
  • 您可以在 Python 类型注释中指定方差吗?

    你能发现下面代码中的错误吗 米皮不能 from typing import Dict Any def add items d Dict str Any gt None d foo 5 d Dict str str add items d f
  • 协方差矩阵的对角元素不是 1 pandas/numpy

    我有以下数据框 A B 0 1 5 1 2 6 2 3 7 3 4 8 我想计算协方差 a df iloc 0 values b df iloc 1 values 使用 numpy 作为 cov numpy cov a b I get ar
  • Spark.read 在 Databricks 中给出 KrbException

    我正在尝试从 databricks 笔记本连接到 SQL 数据库 以下是我的代码 jdbcDF spark read format com microsoft sqlserver jdbc spark option url jdbc sql
  • Python:元类属性有时会覆盖类属性?

    下面代码的结果让我感到困惑 class MyClass type property def a self return 1 class MyObject object metaclass MyClass a 2 print MyObject

随机推荐