我有一个包含几个时间序列的 DataFrame
:
divida movav12 var varmovav12Date 2004-01 0 NaN NaN NaN2004-02 0 NaN NaN NaN2004-03 0 NaN NaN NaN2004-04 34 NaN inf NaN2004-05 30 NaN -0.117647 NaN2004-06 44 NaN 0.466667 NaN2004-07 35 NaN -0.204545 NaN2004-08 31 NaN -0.114286 NaN2004-09 30 NaN -0.032258 NaN2004-10 24 NaN -0.200000 NaN2004-11 41 NaN 0.708333 NaN2004-12 29 24.833333 -0.292683 NaN2005-01 31 27.416667 0.068966 0.1040272005-02 28 29.750000 -0.096774 0.0851062005-03 27 32.000000 -0.035714 0.0756302005-04 30 31.666667 0.111111 -0.0104172005-05 31 31.750000 0.033333 0.0026322005-06 39 31.333333 0.258065 -0.0131232005-07 36 31.416667 -0.076923 0.002660
我想将第一个时间序列 divida
分解,以便将其趋势与季节性和残差成分分开。
我在这里找到了一个答案 这里,并尝试使用以下代码:
import statsmodels.api as sms=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_freqfreq = index.inferred_freqAttributeError: 'Index' object has no attribute 'inferred_freq'
我该如何继续?
回答:
当你将你的 index
转换为 DateTimeIndex
时,运行正常:
df.reset_index(inplace=True)df['Date'] = pd.to_datetime(df['Date'])df = df.set_index('Date')s=sm.tsa.seasonal_decompose(df.divida)<statsmodels.tsa.seasonal.DecomposeResult object at 0x110ec3710>
通过以下方式访问各成分:
s.resids.seasonals.trend