ValueError:您必须指定频率或x必须是带有时间序列索引的pandas对象

Roc*_*etq 8 python datetime python-2.7 pandas statsmodels

我以这种方式获得了时间序列数据:

from pandas.io.data import DataReader
from datetime import datetime
ts_log = DataReader('RUB=X',  'yahoo', datetime(2007,1,1), datetime(2016,8,30))["Adj Close"]
Run Code Online (Sandbox Code Playgroud)

ts_log看起来是这样的:

Date
2007-01-01    3.269759
2007-01-02    3.269759
2007-01-03    3.270519
  .....        ......
Run Code Online (Sandbox Code Playgroud)

然后,我想使用statsmodels进行分解:

from statsmodels.tsa.seasonal import seasonal_decompose
decomposition = seasonal_decompose(ts_log)
Run Code Online (Sandbox Code Playgroud)

ValueError:您必须指定频率或x必须是带有时间序列索引的pandas对象

为了解决这个问题,我尝试了两种方法:

1)这行不通,因为并非每天都有价值:

ts_log = pd.DataFrame(data=ts_log.values, index=pd.date_range(start=datetime(2007, 1, 1), 
                                                              end = datetime(2016,8,30), freq='D'), columns=['usd/rub'])
Run Code Online (Sandbox Code Playgroud)

2)我认为将索引转换为datetime应该可以,但是不能:

ts_log = pd.DataFrame(data=ts_log.values, index=pd.to_datetime(ts_log.index), columns=['usd/rub'])

完全一样的错误。

我该如何使工作正常?

PS该代码非常好,但是我有一些不同的数据,无论如何它应该可以帮助您了解这个想法:

length = 400
x = np.sin(np.arange(length)) * 10 + np.random.randn(length)
df = pd.DataFrame(data=x, index=pd.date_range(start=datetime(2015, 1, 1), periods=length, freq='w'), columns=['value'])
decomposition = seasonal_decompose(df)
Run Code Online (Sandbox Code Playgroud)