python - 如何修复“无法将输入转换为时间戳”ARIMA.predict
问题描述
我需要通过检查 ARIMA 模型的 r2 分数来检查它。所以我需要做 ARIMA.predict,但这里有一个错误:
TypeError: 无法转换输入 [DatetimeIndex(['2014-08-10 06:00:00', '2014-05-05 16:00:00', '2014-04-28 20:00:00', '2014 -03-27 21:00:00'、'2012-08-26 09:00:00'、'2012-09-29 08:00:00'、'2013-02-15 03:00:00'、 '2013-02-28 09:00:00', '2014-06-27 06:00:00', '2014-01-18 11:00:00', ... '2013-11-10 22: 00:00'、'2013-03-18 21:00:00'、'2013-09-09 00:00:00'、'2013-06-08 21:00:00'、'2013-11-11 12:00:00'、'2014-07-07 05:00:00'、'2014-07-27 12:00:00'、'2014-06-03 23:00:00'、'2012-09 -20 12:00:00','2012-12-18 22:00:00'],dtype='datetime64[ns]', name='Datetime', length=3658, >freq=None)] 类型为 >Timestamp
这是我的代码:
dateparse = lambda dates: pd.datetime.strptime(dates, "%d-%m-%Y %H:%M")
train=pd.read_csv("D:/Coding/Datasets/train_traffic.csv", parse_dates=
['Datetime'], index_col='Datetime',date_parser=dateparse)
X_train, X_test, y_train, y_test = ms.train_test_split(train.index,
train.Count, test_size=0.20, random_state=5)
model = ARIMA(ts_log, order=(2, 1, 0), freq='H')
AR = model.fit(disp=-1)
AR.predict(X_test)
数据示例和类型:在 Excel 中:25-08-2012 00:00。
pd.read_csv 没有参数:
Out:dtype('O')
Out:'25-08-2012 00:00'
带参数:
dateparse = lambda dates: pd.datetime.strptime(dates, "%d-%m-%Y %H:%M")
pd.read_csv("D:/Coding/Datasets/train_traffic.csv", parse_dates=['Datetime'], index_col='Datetime',date_parser=dateparse)
Out:dtype('<M8[ns]')
df.index[0]
Out:Timestamp('2012-08-25 00:00:00')
我也试过
pd.read_csv("D:/Coding/Datasets/train_traffic.csv", index_col='Datetime').index[0]
Out:'25-08-2012 00:00'
Out:dtype('O')
谢谢!
解决方案
很难理解这个问题以及问题到底出在哪里,但我会尽力为您提供可重现的代码。
对于此示例,我使用了加利福尼亚州的每日女性出生总数数据集。
import pandas as pd
from statsmodels.tsa.arima_model import ARIMA
from sklearn.model_selection import TimeSeriesSplit
df = pd.read_csv("daily-total-female-births-in-cal.csv", nrows = 365)
df.set_index("Date", inplace = True)
train = df.iloc[0:300, :]
test = df.iloc[300:, :]
arima = ARIMA(train, order = (1,1,0), freq = 'D').fit(disp = 0)
prediction = arima.predict(test.index[0], test.index[-1], dynamic = True)
您不应该使用来自 sklearn 的 train_test_split() 来处理时间序列问题。您也应该使用 sklearn 中的 TimeSeriesSplit。
推荐阅读
- amazon-web-services - 在 AWS 服务中分离项目的最佳方式是什么?
- mysql - 为什么这些sql查询需要这么长时间才能执行
- c# - 网格视图中的行编辑 C#
- node.js - Nodemailer 在生产中抛出 530 个无效凭据
- svg - 如何在 Visual 中交换 svg 图标
- c# - 从 WinForms .net Framework 注入 signalR 上下文 - 无法实例化实现类型
- mysql - MYSQL GROUP BY 与 JSON_ARRAYAGG
- mongodb - SyntaxError:尝试在 mongo Shell 中使用外部编辑器时缺少分号
- azure-functions - 事件中心触发器超时
- python - Odoo 13:错误 - Odoo 13 中的日期格式错误