0

0

Pandas滚动平均的边缘处理与中心对齐技巧

花韻仙語

花韻仙語

发布时间:2025-10-26 12:00:03

|

555人浏览过

|

来源于php中文网

原创

Pandas滚动平均的边缘处理与中心对齐技巧

本文旨在解决pandas滚动平均计算中常见的边缘数据(`nan`值)和输出滞后问题。通过对比pandas默认的`rolling`行为与matlab `smooth`函数动态调整窗口大小的优势,本教程详细阐述了如何在pandas中实现类似效果。核心解决方案是利用`rolling`方法的`min_periods=1`参数允许窗口在数据两端收缩,并结合`center=true`实现中心对齐,从而生成无`nan`、无滞后的平滑数据序列,确保数据从头到尾的有效处理。

理解Pandas默认滚动平均的局限性

在数据分析中,滚动平均(Moving Average)是一种常用的平滑技术,用于识别趋势或消除噪声。Pandas库提供了强大的rolling()方法来实现这一功能。然而,默认情况下,当使用固定窗口大小(例如window=9)进行滚动平均时,在数据序列的开始和结束部分常常会出现NaN(Not a Number)值。这是因为在窗口无法完全填充时,Pandas会默认返回NaN。

例如,以下代码演示了Pandas默认滚动平均的行为:

import pandas as pd
import numpy as np

创建一个示例数据序列

data = np.arange(1, 21) + np.random.rand(20) * 5 df = pd.DataFrame({'signal': data})

默认滚动平均,窗口大小为9

结果对齐到窗口右边缘,且窗口不满时为NaN

df['signal_rolling_default'] = df['signal'].rolling(window=9).mean() print("默认滚动平均结果(部分):") print(df.head(10)) print(df.tail(10))

上述代码的输出会显示,前8个元素以及末尾的几个元素将是NaN。此外,默认的rolling()方法在计算平均值时,会将结果对齐到窗口的右边缘。这意味着输出的平滑信号相对于原始信号会存在一定的滞后(在本例中,滞后约8个位置),这在某些实时分析或信号处理场景中是不可接受的。

MATLAB smooth 函数的启发

在MATLAB中,smooth(signal, 9, 'moving')函数提供了一种更灵活的滚动平均处理方式。它的特点在于能够动态调整窗口大小以适应数据序列的边缘。具体来说,在数据序列的起始部分,窗口会从1个元素逐渐增大到设定的窗口大小(例如9);在数据序列的结束部分,窗口会逐渐缩小。这种机制确保了:

  • 不会产生NaN值,因为即使窗口不完整也会进行计算。
  • 输出信号与原始信号没有滞后,因为平均值是围绕窗口的中心位置计算的。

这种处理方式对于需要完整平滑序列且对滞后敏感的应用场景非常有用,它避免了因边缘数据缺失而导致的信息损失。

Pandas中实现灵活滚动平均的解决方案

为了在Pandas中实现类似MATLAB smooth 函数的灵活滚动平均效果,我们需要利用rolling()方法的两个关键参数:min_periods和center。

1. min_periods 参数:处理边缘数据

min_periods参数用于指定在窗口内进行计算所需的最小观测值数量。默认情况下,min_periods等于window大小,这意味着只有当窗口内的数据点数量达到window大小时,才会计算并返回结果。当我们将min_periods设置为1时,即使窗口内只有一个数据点,也会进行计算。这使得窗口在数据序列的开始和结束部分能够“收缩”,从而避免生成NaN值。

AI智研社
AI智研社

AI智研社是一个专注于人工智能领域的综合性平台

下载

2. center 参数:实现中心对齐

center参数是一个布尔值,用于控制滚动窗口的对齐方式。默认情况下,center=False,表示计算结果与窗口的右边缘对齐。当我们将center设置为True时,滚动平均的结果会与窗口的中心位置对齐。这有效地消除了输出信号相对于原始信号的滞后,使得平滑后的数据能够更准确地反映原始数据在相应时间点附近的平均趋势。

结合使用:实现类似MATLAB smooth 的效果

通过将min_periods=1和center=True这两个参数结合起来,我们就可以在Pandas中实现一个既能处理边缘数据、避免NaN,又能消除滞后、实现中心对齐的滚动平均。

import pandas as pd
import numpy as np

创建一个示例数据序列

data = np.arange(1, 21) + np.random.rand(20) * 5 df = pd.DataFrame({'signal': data})

优化后的滚动平均,窗口大小为9

min_periods=1 允许窗口在边缘收缩,避免NaN

center=True 将结果对齐到窗口中心,消除滞后

df['signal_rolling_optimized'] = df['signal'].rolling(window=9, min_periods=1, center=True).mean()

print("\n优化后的滚动平均结果(部分):") print(df.head(10)) print(df.tail(10))

对比原始信号、默认滚动平均和优化后的滚动平均

print("\n完整对比:") print(df)

运行上述代码,您会发现signal_rolling_optimized列在数据序列的任何位置都不会出现NaN,并且平滑后的值会更好地与原始信号对齐,没有明显的滞后现象。在数据序列的起始和结束部分,窗口会动态调整大小(例如,对于window=9,在第一个元素时窗口大小为1,第二个元素时窗口大小为3,直到达到中心位置时窗口大小为9),确保所有数据点都被有效利用。

注意事项与总结

使用min_periods=1和center=True的组合,虽然解决了NaN和滞后问题,但需要注意:在数据序列的起始和结束部分,实际用于计算平均值的样本数量会小于设定的window大小。这意味着这些边缘点的平均值可能不如中间部分的平均值“平滑”或“代表性强”。然而,在许多应用场景中,为了获得完整的平滑序列并避免滞后,这种权衡是完全可以接受甚至优选的。

这种优化方法在金融时间序列分析、信号处理、传感器数据平滑等领域尤为有用,它能够提供一个更连续、更准确的平滑输出,从而支持后续的分析和决策。掌握这一技巧,将使您在Pandas中进行滚动平均处理时更加得心应手。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
fprintf在matlab中的用法
fprintf在matlab中的用法

fprintf是MATLAB中用于格式化输出的函数。fprintf的基本语法为“fprintf(fileID, format, A)”,其中,fileID是一个标识符,用于指定要写入的文件,如果要将数据写入到命令窗口中,则可以使用1作为fileID的值,format是一个字符串,用于指定输出的格式,A是要输出的数据。

485

2023.09.28

数据分析工具有哪些
数据分析工具有哪些

数据分析工具有Excel、SQL、Python、R、Tableau、Power BI、SAS、SPSS和MATLAB等。详细介绍:1、Excel,具有强大的计算和数据处理功能;2、SQL,可以进行数据查询、过滤、排序、聚合等操作;3、Python,拥有丰富的数据分析库;4、R,拥有丰富的统计分析库和图形库;5、Tableau,提供了直观易用的用户界面等等。

750

2023.10.12

Matlab中length函数的用法
Matlab中length函数的用法

在Matlab中,length函数用于返回向量、数组或字符串中的元素个数。想了解更多length函数的相关内容,可以阅读本专题下面的文章。

319

2023.11.22

Matlab中axis函数用法
Matlab中axis函数用法

在Matlab中,axis函数用于控制坐标轴的范围和比例。想了解更多axis函数的相关内容,可以阅读本专题下面的文章。

773

2023.11.23

subplot在matlab中的用法
subplot在matlab中的用法

subplot在matlab中用于在同一个图窗中创建多个子图。通过指定子图的行数、列数和当前绘图位置,可以在每个子图中绘制不同的图形。想了解更多subplot在matlab中的用法,可以访问下面的文章。

142

2023.11.27

scilab和matlab的区别
scilab和matlab的区别

scilab和matlab的区别:1、注释符号;2、预设变量的表示;3、操作符的用法;4、矩阵的定义与调用;5、程序的编辑与执行;6、数据类型;7、函数库;8、图形界面;9、社区支持与生态系统;10、跨平台兼容性;11、价格。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

185

2023.12.11

Matlab如何四舍五入
Matlab如何四舍五入

Matlab可以通过round函数和格式化输出函数来对数值来进行四舍五入操作。更多关于Matlab相关的问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

405

2023.12.12

Matlab中axis函数用法介绍
Matlab中axis函数用法介绍

在Matlab中,axis函数用于设置当前坐标轴的范围和刻度。想了解更多axis函数的相关内容,可以阅读本专题下面的文章。

163

2023.12.13

C++ 设计模式与软件架构
C++ 设计模式与软件架构

本专题深入讲解 C++ 中的常见设计模式与架构优化,包括单例模式、工厂模式、观察者模式、策略模式、命令模式等,结合实际案例展示如何在 C++ 项目中应用这些模式提升代码可维护性与扩展性。通过案例分析,帮助开发者掌握 如何运用设计模式构建高质量的软件架构,提升系统的灵活性与可扩展性。

14

2026.01.30

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
10分钟--Midjourney创作自己的漫画
10分钟--Midjourney创作自己的漫画

共1课时 | 0.1万人学习

Midjourney 关键词系列整合
Midjourney 关键词系列整合

共13课时 | 0.9万人学习

AI绘画教程
AI绘画教程

共2课时 | 0.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号