You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用相邻数据点清洗Pandas时间序列数据中的尖峰异常值

代码问题排查
  • 核心逻辑颠倒:你的需求是判断当前数据点是否超出后一个数据点的±value区间,但现有代码是拿当前行的值计算上下限,去判断下一行的值是否超限,最后却修改了当前行的值,完全匹配不到真正的异常尖峰,所以运行后结果无变化。
  • 索引匹配错误:iterrows返回的index是DataFrame的行标签,并非行位置序号,如果你使用的不是默认从0开始的连续整数索引(比如时间索引),用index作为iloc的入参会完全取错行。
  • 边界逻辑漏洞:循环没有排除第一行,当index=0时iloc[index-1]会取到DataFrame最后一行的值,引发逻辑错误。
高效尖峰异常值替换方案

直接使用Pandas向量化操作实现需求,无需循环,性能远高于iterrows,尤其适合大规模时间序列数据:

import pandas as pd

value = 5000
target_col = "Admissions to Date"

# 生成前后行的偏移序列
prev = gauteng_df[target_col].shift(1)
next_ = gauteng_df[target_col].shift(-1)

# 构造异常值掩码:当前值超出后一个值±value范围,且排除无前后值的首尾行
outlier_mask = (gauteng_df[target_col] > next_ + value) | (gauteng_df[target_col] < next_ - value)
outlier_mask.iloc[[0, -1]] = False

# 异常值替换为前后行平均值
gauteng_df.loc[outlier_mask, target_col] = (prev[outlier_mask] + next_[outlier_mask]) / 2

内容的提问来源于stack exchange,提问作者hengjuice

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 16:15:01