在Python 3.7中,我有一个由Pandas数据框表示的时间序列,其中的索引是DateTimeIndex,而单个值列是股价:
差距对应于NaN“价格”值,并且有126个非NaN值和20个NaN值。我想做的是对非NaN值进行插值以预测NaN的值。我尝试了几种插值方法(线性,三次样条曲线),但它们不够准确,从上图可以看出,它存在明显的上升趋势,并且还具有每周周期性的痕迹,因此我决定使用statsmodel ARIMA。这是我的代码:
def fill_in_dataframe_ARIMA( df ):
price_is_not_NaN = df[ 'price' ].notnull()
price_is_NaN = np.logical_not( price_is_not_NaN )
# Convert the datetimes of the index into milliseconds:
datetime_ms = df.index.map( to_ms )
# Train the ARIMA model:
train_datetime_ms = datetime_ms[ price_is_not_NaN ]
train_price = df.price[ price_is_not_NaN ]
arima_model = ARIMA( train_price, ( 5, 1, 2 ), train_datetime_ms ).fit()
# Use model to predict the missing prices:
missing_datetime_ms = datetime_ms[ price_is_NaN ]
missing_price = arima_model.predict( exog = missing_datetime_ms )
return missing_price
我期望的是missing_price
最终成为二十个条目的数组状对象,例如missing_datetime_ms
。相反,missing_price
有125个条目,比train_datetime_ms:train_price
中的样本数量少一个。
很明显,我不了解内生和外生的含义(更不用说 interpolate 与 extrapolate )。有人可以解释一下我如何获得20个预测条目的预期结果吗?