使用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方法的参数说明和示例,该方法提供了强大的滚动窗口计算功能,可在时间序列和数据处理中发挥重要作用。

官方文档

时间序列原例子教程

相关推荐
Leo.yuan7 小时前
数据量大Excel卡顿严重?选对报表工具提高10倍效率
数据库·数据分析·数据可视化·powerbi
B站计算机毕业设计超人9 小时前
计算机毕业设计Python+大模型农产品价格预测 ARIMA自回归模型 农产品可视化 农产品爬虫 机器学习 深度学习 大数据毕业设计 Django Flask
大数据·爬虫·python·深度学习·机器学习·课程设计·数据可视化
海边散步的蜗牛12 小时前
学术论文写作丨机器学习与深度学习
人工智能·深度学习·机器学习·chatgpt·数据分析·ai写作
数模竞赛Paid answer14 小时前
2023年MathorCup数学建模A题量子计算机在信用评分卡组合优化中的应用解题全过程文档加程序
数学建模·数据分析·mathorcup
康谋自动驾驶15 小时前
康谋分享 | 确保AD/ADAS系统的安全:避免数据泛滥的关键
数据分析·自动驾驶·汽车
CodeCraft Studio15 小时前
「实战应用」如何可视化 DHTMLX Scheduler 中的资源工作量?
javascript·ui·数据可视化
幸运小新21 小时前
数据分析-Excel基础操作
数据分析
用一个不重复的昵称1 天前
python数据写入excel文件
python·excel·pandas
Moonquake_www1 天前
数据集划分
算法·数据分析
神奇夜光杯1 天前
Python酷库之旅-第三方库Pandas(211)
开发语言·人工智能·python·excel·pandas·标准库及第三方库·学习与成长