使用滚动标准差检测 Pandas 数据框中的异常值

2024-06-23

我有一个用于快速傅立叶变换信号的数据帧。

一列表示以 Hz 为单位的频率,另一列表示相应的幅度。

我读过几年前发表的一篇文章,您可以使用一个简单的布尔函数来排除或仅包含最终数据框中高于或低于几个标准差的异常值。

df = pd.DataFrame({'Data':np.random.normal(size=200)})  # example dataset of normally distributed data. 
df[~(np.abs(df.Data-df.Data.mean())>(3*df.Data.std()))] # or if you prefer the other way around

问题是,当频率增加到 50 000 Hz 时,我的信号会下降几个数量级(最多小 10 000 倍)。因此,我无法使用仅导出高于 3 个标准差的值的函数,因为我只会从前 50 Hz 中选取“峰值”异常值。

有没有办法可以导出数据框中超出滚动平均值 3 个滚动标准差的异常值?


用一个简单的例子也许可以最好地说明这一点。基本上,您将现有数据与新列进行比较,该新列是滚动平均值加上三个标准差,也是滚动的。

import pandas as pd
import numpy as np
np.random.seed(123)
df = pd.DataFrame({'Data':np.random.normal(size=200)})

# Create a few outliers (3 of them, at index locations 10, 55, 80)
df.iloc[[10, 55, 80]] = 40.    

r = df.rolling(window=20)  # Create a rolling object (no computation yet)
mps = r.mean() + 3. * r.std()  # Combine a mean and stdev on that object

print(df[df.Data > mps.Data])  # Boolean filter
#     Data
# 55  40.0
# 80  40.0

要添加仅对异常值进行过滤的新列,在其他地方使用 NaN:

df['Peaks'] = df['Data'].where(df.Data > mps.Data, np.nan)

print(df.iloc[50:60])
        Data  Peaks
50  -1.29409    NaN
51  -1.03879    NaN
52   1.74371    NaN
53  -0.79806    NaN
54   0.02968    NaN
55  40.00000   40.0
56   0.89071    NaN
57   1.75489    NaN
58   1.49564    NaN
59   1.06939    NaN

Here .where https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.where.html回报

与形状相同的物体self其对应的条目是 从self where cond为 True,否则来自other.

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

使用滚动标准差检测 Pandas 数据框中的异常值 的相关文章

随机推荐

  • 使用 Akka 将文件从服务器流式传输到客户端

    基本上我想允许用户从服务器下载 csv 文件 假设服务器上已存在 CSV 文件 API 端点通过 GET export 公开 如何将文件从 Akka HTTP 服务器流式传输到客户端 这就是我到目前为止所拥有的 Service def ex
  • Java 确保库位于路径环境变量中

    我正在开发一个 Java 应用程序 它使用访问 Windows dll 的外部 jar 文件 如果我将 DLL 的路径放入 Windows 路径环境变量中 应用程序可以正常运行 但我真的不想在部署此应用程序的每台计算机上都设置此 Windo
  • 未找到 ffmpeg 命令,但 pip 列表显示 ffmpeg

    我一直在尝试使用命令安装 ffmpegpip install ffmpeg我正在没有 sudo 权限的服务器上执行此操作 在编写 ffmpeg 时 我得到 ffmpeg command not found 然后我检查了pip list它显示
  • 是否可以重新映射“wq”来保存并关闭当前缓冲区,而不是在 Vim 中保存并退出?

    Vim 新手 当我发出 wqEx 命令 我想让它只保存并关闭活动缓冲区 而不是保存它然后从 Vim 退出 同样 我想做 q命令与 bd在其效果中 对于如何实施这种行为有什么建议吗 Vim 允许用户在所有模式下为命令添加键映射 包括命令行模式
  • 使用 pytest 装置进行的测试可以交互运行吗?

    我有一些使用 pytest 和装置编写的测试 例如 class TestThing pytest fixture def temp dir self request my temp dir tempfile mkdtemp def fin
  • 转义片段中的 $ 字符

    我发现自己这些天做了很多 jQuery 所以我开始将一些常见的事情抽象成片段 我期待与社区分享这些内容 但我现在遇到了一个问题 代码片段中的文字是通过在文字名称周围添加美元符号 来定义的 以界定您想要提供的值的去向 这很困难 因为 jQue
  • 如何添加 UICollectionView 标题

    我希望以编程方式向我的 UICollectionView 添加标签 并使用 viewForSupplementaryElementOfKind 和 referenceSizeForHeaderInSection 来设置它 但是由于某种原因
  • 如何修复未捕获的 InvalidValueError: setPosition: not a LatLng or LatLngLiteral: in property lat: not a number?

    我正在尝试将我的 googlemaps v2 功能移植到 v3 但不知怎的 我陷入了一个奇怪的错误 我找不到我做错了什么 错误 未捕获 InvalidValueError setPosition 不是 LatLng 或 LatLngLite
  • 检测 iframe 加载错误

    我正在使用 src 属性将用户选择的页面加载到 iframe 中 如果加载失败 我想以对用户有意义的方式报告问题 iframe 通常不支持 onerror 根据http www w3schools com jsref dom obj fra
  • 将数组的逆序附加到自身

    我创建了一个颜色值数组 表示颜色从红色到蓝色的平滑过渡 现在我希望这个数组能带你从红色到蓝色 然后再返回 显而易见的解决方案是将数组的反转追加到数组中 我已经编写了代码来执行此操作 但它没有按照我理解的方式工作 相反 它会重复创建反向数组
  • Winforms 多线程:每次在 UI 线程上调用方法时是否需要创建一个新的委托?

    我想调用一个在 UI 线程上操作控件的方法 我的代码可以运行并且我想优化 我指的是这个MSDN 上的资源 http msdn microsoft com en us library 757y83z4 28VS 71 29 aspx 根据那里
  • 定时器运行后在JS setTimeout中添加持续时间

    我正在尝试找出一种模拟 AS3 的 Timer 类的方法 如果您不熟悉 您可以做的一件很酷的事情就是为计时器添加持续时间 即使它已经在运行 这个功能有很多非常好的用途 有人对用 js 做这个有什么想法吗 我不熟悉这个类 但你可以轻松地在 J
  • 在 Java 语言规范版本 11 的 4.10.2 节中,如何读取 Uₖ θ?

    我知道一个该领域的上一个问题 https stackoverflow com questions 51434267 confusion over generics subtyping in java specs但您会注意到原始发帖者问题的根
  • 文件头中 shebang 的用法:是否有任何选项可以在 shebang 中传递多个参数

    我使用不同的命名空间来执行 python 文件 使用 shebang hashbang 来执行此脚本 bin bash c 面临的问题是 shebang 只接受一个参数 即使我传递多个参数 它也会将其视为单个字符串 舍邦使用 sbin ip
  • 从代码中覆盖 OMP_NUM_THREADS - 真正的

    到目前为止我能找到的所有答案都建议致电omp set num threads 虽然对于大多数情况来说这是一个正确的答案 但它对我不起作用 在内部 调用omp set num threads导致创建每线程 ICV 或修改 如果当前线程已经有一
  • Java内存中类似SQL表的数据结构

    有几次我想要一个类似于 SQL 表的数据结构 您可以在其中选择各个字段和多个字段 与内存中的 SQL 实现类似 只是我不想在数据结构中存储那么多对象 我还要求该对象可以通过标准 Java 方式进行序列化 我之前曾使用多个哈希表或自定义哈希键
  • 如何在 C++ 中序列化对象?

    我有一个小的对象层次结构 需要通过套接字连接进行序列化和传输 我需要序列化该对象 然后根据它的类型对其进行反序列化 在 C 中是否有一种简单的方法可以做到这一点 就像在 Java 中一样 需要明确的是 我正在寻找将对象转换为字节数组 然后再
  • 仅运行一组嵌入式安装程序的 Inno Setup 安装程序

    我正在 Inno Setup 中创建一个安装程序 该安装程序将仅运行一组嵌入式安装程序 它本身不安装任何文件 编译安装程序时 我收到此错误 您必须输入带驱动器号的完整路径 例如 C APP 或 UNC 路径 例如 server share
  • 如何在内核内部使用性能计数器?

    我想访问内核内部的性能计数器 我发现了很多在用户空间中使用性能计数器的方法 但是你能告诉我一些在内核空间中使用这些计数器的方法吗 Please 不指定工具名称 我想写自己的代码 最好是内核模块 我使用的是内核为 3 18 1 的 Ubunt
  • 使用滚动标准差检测 Pandas 数据框中的异常值

    我有一个用于快速傅立叶变换信号的数据帧 一列表示以 Hz 为单位的频率 另一列表示相应的幅度 我读过几年前发表的一篇文章 您可以使用一个简单的布尔函数来排除或仅包含最终数据框中高于或低于几个标准差的异常值 df pd DataFrame D