在时间序列信号处理过程中,经常会用到滑动窗口处理方法:它规定一个特定单位长度的窗口来选区信号信号序列,然后计算该窗口中信号的统计指标。
rolling()
函数支持对Series
和DataFrame
的操作。
对于信号的滑动窗口处理方法,Pandas提供了一个封装好的滑动窗口rolling()
函数,其使用格式如下所示:
rolling(window, min_periods=None, center=False, win_type=None, on=None, axis=0, closed=None)
其中,常用的参数及其作用如下表所示:
参数 | 作用 |
---|---|
window |
滑动窗口的大小,取值包括: (1) int 整型数值,即每个窗口是固定大小,包括相同数量的观测值 (2) offset 偏移,每个窗口包含的时间段,包含的观测值数量不确定 |
min_periods |
窗口最少包含的观测值,其取值包括: (1) int 整型数值,默认为None (2) offset 类型默认为1 |
center |
是否将窗口标签设置为居中,默认为False |
win_type |
窗口类型 |
on |
对于DataFrame ,指定哪些列需要进行滑动窗口操作,值为列名 |
axis |
表示进行滑动窗口操作的轴,默认为0表示对列进行操作;设置为1表示对行进行操作 |
closed |
表示定义区间的开闭 |
假如,我们手里有一个销售员十天的销售量sales_volume
,这里需要统计一下近三天计的销售总量,代码如下所示:
import pandas as pd
# 下面代码生成一个Series序列,第一天销售量为1、第二天为2、...第十天为10
sales_volume = pd.Series(range(1, 11))
# 通过rolling()函数计算近三天的销售总量,并输出结果
print("三天的销售总量为:\n", salses_volume.rolling(window=3).sum())
代码的执行结果如下图所示:
其实上面代码出现的NaN
数值类型,在实际数据处理过程中并不是我们想要的结果。为了避免它给我们处理数据带来麻烦,可以使用rolling()
函数的min_periods
参数来避免。下面的代码将min_periods
参数设置为1
,即如果没有前面的销售信息,则只统计当天的销售信息,这样就可以避免NaN
数值的出现。
由于第一天并没有前两天的销售信息,则只计算当天的销售信息;同样的,对于第二天没有前天的销售信息,则只统计当天和昨天的销售总量,代码如下所示:
print("三天的销售总量为:\n", salses_volume.rolling(window=3, min_peiriods=1).sum())
代码执行结果如下图所示:
作为入门,看懂上面两条指令即可熟悉rolling()
函数的使用方法了,如果想进一步了解该函数的详细用法,可以参考(35条消息) Pandas中的滑动窗口—rolling()函数方法_KJ.JK的博客-CSDN博客_pandas rolling函数。
参考文献
详解pandas中的rolling - 古明地盆 - 博客园
(35条消息) Pandas中的滑动窗口—rolling()函数方法_KJ.JK的博客-CSDN博客_pandas rolling函数