我有一个带有几个时间序列的DataFrame
:
divida movav12 var varmovav12
Date
2004-01 0 NaN NaN NaN
2004-02 0 NaN NaN NaN
2004-03 0 NaN NaN NaN
2004-04 34 NaN inf NaN
2004-05 30 NaN -0.117647 NaN
2004-06 44 NaN 0.466667 NaN
2004-07 35 NaN -0.204545 NaN
2004-08 31 NaN -0.114286 NaN
2004-09 30 NaN -0.032258 NaN
2004-10 24 NaN -0.200000 NaN
2004-11 41 NaN 0.708333 NaN
2004-12 29 24.833333 -0.292683 NaN
2005-01 31 27.416667 0.068966 0.104027
2005-02 28 29.750000 -0.096774 0.085106
2005-03 27 32.000000 -0.035714 0.075630
2005-04 30 31.666667 0.111111 -0.010417
2005-05 31 31.750000 0.033333 0.002632
2005-06 39 31.333333 0.258065 -0.013123
2005-07 36 31.416667 -0.076923 0.002660
我想分解第一个时间序列divida
,这样我就可以将它的趋势与季节性和剩余成分分离开来。
我找到了答案here,并尝试使用以下代码:
import statsmodels.api as sm
s=sm.tsa.seasonal_decompose(divida.divida)
不过,我一直都有这个错误:
Traceback (most recent call last):
File "/Users/Pred_UnBR_Mod2.py", line 78, in <module> s=sm.tsa.seasonal_decompose(divida.divida)
File "/Library/Python/2.7/site-packages/statsmodels/tsa/seasonal.py", line 58, in seasonal_decompose _pandas_wrapper, pfreq = _maybe_get_pandas_wrapper_freq(x)
File "/Library/Python/2.7/site-packages/statsmodels/tsa/filters/_utils.py", line 46, in _maybe_get_pandas_wrapper_freq
freq = index.inferred_freq
AttributeError: 'Index' object has no attribute 'inferred_freq'
有人能照一下吗?
简单一点:
遵循三个步骤: 1-如果未完成,请将列设为yyyy-mm-dd或dd-mm-yyyy(使用excel)。 2-然后使用pandas将其转换为日期格式:
df['Date']=pd.to_datetime(df['Date'])
3-分解使用:
来自statsmodels.tsa.季节性进口季节性分解 分解=季节性分解(ts_log)
最后:———————————————————————————————————————————————
Statsmodel只会在你提供频率的情况下分解序列。通常所有时间序列索引都包含频率,例如:每日、工作日、每周,所以它显示错误。您可以通过两种方式删除此错误:
DateTime
函数。它使用内部函数infer_freq
来查找频率并返回带有频率的索引。df.index.asfreq(freq='m')
。这里m
表示月份。如果您具有域知识或通过d
设置频率。当您将
index
转换为DateTimeIndex
时,工作正常:通过以下方式访问组件:
相关问题 更多 >
编程相关推荐