【发布时间】:2018-06-20 09:57:57
【问题描述】:
我正在写一个关于时间序列的移动平均函数:
def datedat_moving_mean(datedat,window):
#window is the average length
datedatF = pandas.DataFrame(datedat)
return (datedatF.rolling(window).mean()).values
以上代码抄自Moving Average- Pandas
我将这个函数应用于这个时间序列:
datedat1 = numpy.array(
[ pandas.date_range(start=datetime.datetime(2015, 1, 30),periods=17),
numpy.random.rand(17)]).T
但是,datedat_moving_mean(datedat1,4) 只返回原始的datedat1。它移动平均没有!怎么了?
【问题讨论】:
-
如果你只做
datedatF[1].rolling(4).mean(),它会给你一个数字结果。由于您在整个数据帧上调用rolling.mean,并且由于第一列不是数字,我相信它会返回输入而不做任何事情。 -
我相信这与数据框中的第一列是 Timestamp 对象列(不同于 datetime 列)这一事实有关,因此 pandas 会静默返回而不会引发任何错误(如果该列是日期时间列,它会完成)。
-
Err...我如何将
Timestamp转换为日期时间列?我尝试datedat_moving_mean([i.to_pydatetime() for i in datedat1[:,0]],4),它仍然返回ops for Rolling for this dtype datetime64[ns] are not implemented。 -
datedatF[1] = pd.to_datetime(datedatF[1])它会抛出错误而不是错误的输出。 -
datedat1F=pandas.DataFrame(datedat1)和pandas.to_datetime(datedat1F[1]).values仍然返回一个带有dtype='datetime64[ns]'的数组,它不能用于平均...
标签: python pandas moving-average