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

13

我试图使用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


5
您可能因为试图在所有列上计算平均值,包括日期时间列,而导致该错误。如果您执行data.Value.rolling(window=2).mean(),那么是否能够正常工作? - BrenBarn
是的,但问题是,如果我这样做,那么我是否需要经过将这些新值与它们相关联的时间对齐的过程? - David Crook
你可以将日期列移动到索引中。 - BrenBarn
如果这么简单的话,我会对自己非常生气...现在试一下... - David Crook
是的,你正在使用的那个索引只是一个日期的“int”版本。我忘记它叫什么了,但我认为我在Excel中看到过它们。 - piRSquared
是的,没错...它可以工作。有趣...你想把它放上去作为答案吗? - David Crook
1个回答

16

设置

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()

在此输入图像描述


是的,我已经做到了这一步,但我想我需要获取与正确日期时间相关联的滚动值,并且计算助手文档似乎有一个同时处理日期和值的工作版本... - David Crook
根据此处以及我的实现经验,似乎需要在将时间设置为索引之后调用特定的列,例如df['value'].rolling(2).mean() - cardamom

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接