【发布时间】:2017-01-09 09:55:18
【问题描述】:
我有两个 numpy 数组 light_points 和 time_points,想对这些数据使用一些时间序列分析方法。
然后我尝试了这个:
import statsmodels.api as sm
import pandas as pd
tdf = pd.DataFrame({'time':time_points[:]})
rdf = pd.DataFrame({'light':light_points[:]})
rdf.index = pd.DatetimeIndex(freq='w',start=0,periods=len(rdf.light))
#rdf.index = pd.DatetimeIndex(tdf['time'])
这可行,但没有做正确的事情。 事实上,测量的时间间隔并不均匀,如果我只是将 time_points pandas DataFrame 声明为我的帧的索引,我会收到一个错误:
rdf.index = pd.DatetimeIndex(tdf['time'])
decomp = sm.tsa.seasonal_decompose(rdf)
elif freq is None:
raise ValueError("You must specify a freq or x must be a pandas object with a timeseries index")
ValueError: You must specify a freq or x must be a pandas object with a timeseries index
我不知道如何纠正这个问题。
此外,熊猫的TimeSeries 似乎已被弃用。
我试过了:
rdf = pd.Series({'light':light_points[:]})
rdf.index = pd.DatetimeIndex(tdf['time'])
但它给了我一个长度不匹配:
ValueError: Length mismatch: Expected axis has 1 elements, new values have 122 elements
尽管如此,我不明白它来自哪里,因为 rdf['light'] 和 tdf['time'] 长度相同...
最后,我尝试将我的 rdf 定义为 pandas 系列:
rdf = pd.Series(light_points[:],index=pd.DatetimeIndex(time_points[:]))
我明白了:
ValueError: You must specify a freq or x must be a pandas object with a timeseries index
然后,我尝试用
替换索引 pd.TimeSeries(time_points[:])
它给了我关于seasonal_decompose 方法行的错误:
AttributeError: 'Float64Index' object has no attribute 'inferred_freq'
如何处理间隔不均匀的数据? 我正在考虑通过在现有值之间添加许多未知值并使用插值来“评估”这些点来创建一个间隔大致均匀的时间数组,但我认为可能有一个更清洁、更简单的解决方案。
【问题讨论】:
-
如果您发布Minimal, Complete, and Verifiable example,您将增加更改以获得好的答案。
标签: python pandas machine-learning time-series statsmodels