熊猫滚动窗口 - datetime64[ns] 未实现

Posted

技术标签:

【中文标题】熊猫滚动窗口 - datetime64[ns] 未实现【英文标题】:Pandas Rolling Window - datetime64[ns] are not implemented 【发布时间】:2016-11-19 19:08:29 【问题描述】:

我正在尝试使用 Python/Pandas 构建一些图表。我有每秒采样的数据。这是一个示例:

Index, Time, Value

31362, 1975-05-07 07:59:18,  36.151612
31363, 1975-05-07 07:59:19,  36.181368
31364, 1975-05-07 07:59:20,  36.197195
31365, 1975-05-07 07:59:21,  36.151413
31366, 1975-05-07 07:59:22,  36.138009
31367, 1975-05-07 07:59:23,  36.142962
31368, 1975-05-07 07:59:24,  36.122680

我需要创建各种窗口来查看数据。 10、100、1000 等。不幸的是,当我尝试对整个数据框进行窗口化时,出现以下错误...

NotImplementedError: ops for Rolling for this dtype datetime64[ns] are not implemented

我查看了这些文档:http://pandas.pydata.org/pandas-docs/stable/computation.html 作为参考,他们似乎在日期范围内这样做。我确实注意到他们拥有的和我拥有的数据类型不同。

有没有简单的方法可以做到这一点?

这就是我想要做的理想:

tmp = data.rolling(window=2)
tmp.mean()

我正在使用 plotly 来绘制原始数据,然后在其上绘制窗口数据。我的目标是找到理想的窗口来识别数据中更清晰的趋势,从而消除一些噪音。

谢谢!

补充说明:

我认为我需要采用这种格式的数据:

pandas.core.series.Series 给这个:

pandas.tseries.index.DatetimeIndex

【问题讨论】:

您可能会遇到该错误,因为您正在尝试计算所有列的平均值,包括 datetime 列。如果你这样做 data.Value.rolling(window=2).mean() 会起作用吗? 是的,但问题是,如果我这样做了,我是不是必须通过将这些新值与它们相关联的时间进行排列的过程? 您可以将日期列移动到索引中。 如果这么简单,我会气死自己的……现在就试试吧…… 是的,您使用的索引只是日期的int 版本。我忘记了它叫什么,但我想我从 excel 中认出了它们。 【参考方案1】:

设置

from StringIO import StringIO
import pandas as pd

text = """Index,Time,Value
31362,1975-05-07 07:59:18,36.151612
31363,1975-05-07 07:59:19,36.181368
31364,1975-05-07 07:59:20,36.197195
31365,1975-05-07 07:59:21,36.151413
31366,1975-05-07 07:59:22,36.138009
31367,1975-05-07 07:59:23,36.142962
31368,1975-05-07 07:59:24,36.122680"""

df = pd.read_csv(StringIO(text), index_col=0, parse_dates=[1])

df.rolling(2).mean()
NotImplementedError: ops for Rolling for this dtype datetime64[ns] are not implemented

首先,这是对@BrenBarn 评论的确认,如果他决定发布答案,他应该得到表扬。 BrenBarn,如果你决定回答,我会删除这篇文章。

说明

Pandas 不知道日期值的滚动平均值应该是什么。 df.rolling(2).mean() 正在尝试在 TimeValue 列上滚动和平均。该错误是礼貌地(或不礼貌地,取决于您的观点)告诉您您正在尝试一些无意义的事情。

解决方案

Time 列移动到索引中,然后……就是这样。

df.set_index('Time').rolling(2).mean()

【讨论】:

是的,所以我已经做到了这一点,但我想我需要获取与正确日期时间相关的滚动值,并且计算帮助文档似乎有一个工作版本的日期和值同时... 根据this和我的经验,它似乎喜欢在时间设置为索引后调用的特定列,即df['value'].rolling(2).mean()

以上是关于熊猫滚动窗口 - datetime64[ns] 未实现的主要内容,如果未能解决你的问题,请参考以下文章

熊猫日期时间格式删除时区[重复]

如何比较了一系列的标量

数据类型“datetime64[ns]”和“<M8[ns]”之间的区别?

pandas 中 datetime 和 datetime64[ns] 的比较

Python numpy:无法将 datetime64[ns] 转换为 datetime64[D](与 Numba 一起使用)

将具有 dtypes datetime64[ns] 和 timedelta64[ns] 的数据帧导入到 google bigquery 表