Python如何进行数据平滑处理_使用Pandas滚动中位数计算

张开发
2026/4/10 6:17:12 15 分钟阅读

分享文章

Python如何进行数据平滑处理_使用Pandas滚动中位数计算
滚动中位数比均值更抗异常值因其仅依赖排序后中间位置的值单个极值不影响结果而滚动均值易受噪声污染适用于监控预处理、IoT清洗等场景但性能较慢且对NaN敏感。滚动中位数为什么比均值更抗异常值因为中位数不依赖所有值的大小只看排序后中间位置单个极大/极小值不会拉偏结果。而 rolling().mean() 会直接被污染尤其在传感器数据、日志响应时间这类含突发噪声的场景里平滑后仍残留毛刺。适用场景监控指标突增检测前的预处理、IoT设备原始读数清洗、金融tick数据去噪注意 rolling().median() 默认不支持 min_periods 小于窗口长度Pandas ≤ 2.0若首几个点要补值得手动用 fillna()性能上比均值慢约3–5倍内部需排序窗口大如 window1000时明显卡顿建议先采样或用 numpy.median 手动分块如何正确设置 rolling().median() 的 window 和 center 参数窗口大小不是拍脑袋定的太小去不掉噪声太大抹平真实变化。常见错误是把 window 设成固定秒数却忽略采样频率不均——比如用 window5 处理每秒10条的数据实际覆盖0.5秒但若某段数据丢包时间跨度就乱了。时间序列优先用时间偏移 df[value].rolling(2S).median()自动对齐时间索引等间隔数值序列用整数窗口df[value].rolling(window7).median()对应7个采样点centerTrue 让输出与原位置对齐中点对中点但首尾会多出 NaNcenterFalse默认则结果左对齐首 window-1 个值为 NaN若需首尾填充别用 min_periods1它只是降低计算门槛不解决缺失应接 .fillna(methodbfill).fillna(methodffill)rolling().median() 在 NaN 处的行为和修复方式默认遇到 NaN 就中断计算哪怕窗口内只有一个 NaN整个窗口结果就是 NaN。这和 mean() 的 skipnaTrue 行为不同——median() 没有跳过选项。检查原始数据先跑 df[value].isna().sum()确认是否真有缺失而非全零伪装预填充再滚动用插值df[value].interpolate()或前向填充df[value].ffill()别直接删行会破坏时间连续性极端情况可改用 scipy.signal.medfilt它默认忽略边界并支持奇数窗口但不认 Pandas 时间索引需转 numpy.ndarray替代方案当 rolling().median() 不够用时该换什么滚动中位数本质是局部排序无法处理趋势漂移或周期性干扰。比如温度数据白天缓慢上升夜间骤降单纯中位数会滞后且压扁峰谷。 Tellers AI Tellers是一款自动视频编辑工具可以将文本、文章或故事转换为视频。

更多文章