我有两个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
我不知道如何更正这个错误。
另外,似乎 pandas 的 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 Series:
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'
如何处理不均匀间距的数据?我曾考虑创建一个大量未知值的近似均匀间距时间数组,在现有值之间使用插值方式来“评估”这些点,但我认为可能存在更干净、更简单的解决方案。