熊猫滚动窗口 - 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()
正在尝试在 Time
和 Value
列上滚动和平均。该错误是礼貌地(或不礼貌地,取决于您的观点)告诉您您正在尝试一些无意义的事情。
解决方案
将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 表