使用pandas.DataFrame.rolling查看时间序列中的异常值

Pandas是Python中最受欢迎的数据分析和处理库之一,提供了许多强大且灵活的数据操作工具。在Pandas中,DataFrame.rolling方法是一个强大的工具,用于执行滚动窗口计算,能够对数据进行平滑处理、计算移动平均值和其他滚动统计量等操作。在本文中,我们将深入探讨DataFrame.rolling方法的各种参数和示例,以帮助您更好地理解和应用这个功能。

DataFrame.rolling方法的参数说明

window参数

window参数用于指定滚动窗口的大小,可以是整数、时间间隔、字符串、偏移量或BaseIndexer子类。具体如下:

  • 整数:固定窗口大小的观测数量。
  • 时间间隔、字符串、偏移量:每个窗口的时间周期,仅适用于日期时间型索引。
  • BaseIndexer子类:基于定义的get_window_bounds方法的窗口边界。

min_periods参数

min_periods参数指定窗口中所需的最小观测数量,用于计算结果值。默认为None。

center参数

center参数用于设置窗口标签的位置。默认为False。

  • False:将窗口标签设置为窗口索引的右边缘。
  • True:将窗口标签设置为窗口索引的中心。

win_type参数

win_type参数用于指定窗口类型,默认为None。

  • None:所有点均匀加权。
  • 字符串:必须是有效的scipy.signal窗口函数。

on参数

on参数用于DataFrame,指定在哪个列标签或索引级别上计算滚动窗口,而不是使用DataFrame的索引。

axis参数

axis参数指定滚动操作的轴向,默认为0。

  • 0或'index':沿行进行滚动。
  • 1或'columns':沿列进行滚动。

closed参数

closed参数指定窗口的闭合方式,默认为None('right')。

  • 'right':排除窗口中的第一个点。
  • 'left':排除窗口中的最后一个点。
  • 'both':不包括窗口中的任何点。
  • 'neither':排除窗口中的第一个和最后一个点。

step参数

step参数用于在每个步骤处计算窗口结果,相当于切片操作::step。在1.5.0版中新增。

method参数

method参数用于指定单列或行('single')或整个对象('table')的滚动操作。在1.3.0版中新增。

返回值

DataFrame.rolling方法返回一个pandas.api.typing.Windowpandas.api.typing.Rolling的实例。

示例

以下是一些DataFrame.rolling方法的使用示例:

  • 使用不同窗口大小进行滚动求和。
  • 在时间序列数据上使用时间间隔进行滚动计算。
  • 使用不同参数进行滚动操作。
  • 在日期列上进行滚动计算。
python 复制代码
# 示例代码
import pandas as pd
import numpy as np

# 创建示例数据
df = pd.DataFrame({'B': [0, 1, 2, np.nan, 4]})

# 滚动求和示例
result = df.rolling(2).sum()
print(result)
r 复制代码
df.rolling(2).sum()
     B
0  NaN
1  1.0
2  3.0
3  NaN
4  NaN
  • 相当于包括自己往前两个为一个窗口,进行sum(),对于第一个因为前面为0所以为Nan,对于第二个数 = 0 + 1 = 1 ,同理第三个数 = 1 + 2 = 3.

在时间序列上的应用

介绍:基于时间窗口的滚动求和

在数据处理中,经常需要对时间序列数据执行滚动窗口计算以获取更深层次的见解。Pandas库中的DataFrame.rolling方法为我们提供了一种便捷的方式来进行此类操作。特别是,在时间序列数据中,通过指定时间间隔来计算滚动统计量可以洞察数据的趋势和模式。

让我们以一个具体的示例来说明:我们有一个包含时间戳索引的DataFrame df_time,其中的列B包含了一些数值数据。我们希望对这个数据执行滚动求和,并且窗口的宽度是2秒。

py 复制代码
import pandas as pd
import numpy as np

# 创建示例数据
df_time = pd.DataFrame({'B': [0, 1, 2, np.nan, 4]},
                       index=[pd.Timestamp('20130101 09:00:00'),
                              pd.Timestamp('20130101 09:00:02'),
                              pd.Timestamp('20130101 09:00:03'),
                              pd.Timestamp('20130101 09:00:05'),
                              pd.Timestamp('20130101 09:00:06')])
print(df_time)

df_time
                       B
2013-01-01 09:00:00  0.0
2013-01-01 09:00:02  1.0
2013-01-01 09:00:03  2.0
2013-01-01 09:00:05  NaN
2013-01-01 09:00:06  4.0
py 复制代码
result = df_time.rolling('2s').sum()
print(result)

                       B
2013-01-01 09:00:00  0.0
2013-01-01 09:00:02  1.0
2013-01-01 09:00:03  3.0
2013-01-01 09:00:05  NaN
2013-01-01 09:00:06  4.0

再来一个时间序列查看异常值的例子

py 复制代码
# pick a window size 
window_size = 25

![image.png](https://p1-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/5f50add371c3406aa9b246dd6e76579e~tplv-k3u1fbpfcp-jj-mark:0:0:0:0:q75.image#?w=1278&h=615&s=112122&e=png&b=f0f0f0)
# calculate rolling mean and standard deviation
xroll = series['value'].rolling(window_size)
series['mean_roll'] = xroll.mean()
series['sd_roll'] = xroll.std()

# calculate the Z-score
series['zscore'] = np.abs( (series['value'] - series['mean_roll']) / series['sd_roll'])
series['zscore'].plot()
py 复制代码
series.loc[series['zscore'] > 3][['timestamp', 'value']]

以上是DataFrame.rolling方法的参数说明和示例,该方法提供了强大的滚动窗口计算功能,可在时间序列和数据处理中发挥重要作用。

官方文档

时间序列原例子教程

相关推荐
CoovallyAIHub4 小时前
系统越上越多、问题越查越慢,制造业厂长的真实痛点
人工智能·agent·数据可视化
正在走向自律6 小时前
时序大模型 TimechoAI 实战指南,让时序数据分析从“手工建模“走向“智能预测“
数据挖掘·数据分析·timechodb·时序数据·时序大模型·timechoai
躺柒7 小时前
读数据可视化05视觉感知
信息可视化·数据挖掘·数据分析·视觉·视觉感知
cc57250265310 小时前
计算机专业考证和做项目哪个重要
数据分析
数模竞赛Paid answer1 天前
2026年电工杯数学建模B题嵌入式社区养老服务站的建设与优化问题求解全过程论文及程序
数学建模·数据分析·电工杯
databook1 天前
如何对稀疏数据的场景进行分析
python·数据挖掘·数据分析
wang_yb1 天前
如何对稀疏数据的场景进行分析
数据分析·databook
科技每日热闻1 天前
AI 赋能财务资金管理、风险预警、经营数据分析,合适的云上财务智能 Agent 有哪些?—— 优先采用 Amazon Quick 四链路解决方案
人工智能·ai·数据挖掘·数据分析
Uncommon.1 天前
使用pandas处理csv并转为张量
pytorch·python·深度学习·pandas
Highcharts.js2 天前
可视化图表之甘特图Gantt:原理、应用与实践指南
甘特图·数据可视化·highcharts·图表渲染