Python:“Pandas 数据转换为对象的 numpy dtype。使用 np.asarray(data) 检查输入数据。”
Posted
技术标签:
【中文标题】Python:“Pandas 数据转换为对象的 numpy dtype。使用 np.asarray(data) 检查输入数据。”【英文标题】:Python: "Pandas data cast to numpy dtype of object. Check input data with np.asarray(data)." 【发布时间】:2018-03-14 01:20:19 【问题描述】:我正在尝试创建一个 ARIMA 模型,以使用来自我的服务器的一些数据来预测时间序列,并且我一直显示标题上的错误并且我不知道我需要什么类型的对象。代码如下:
frame = pd.read_sql(query, con=connection)
connection.close()
frame['time_field'] = pd.to_timedelta(frame['time_field'])
print(frame.head(10))
#fitting
model = ARIMA(frame, order=(5,1,0))
model_fit = model.fit(disp=0)
我见过这样的例子: https://machinelearningmastery.com/arima-for-time-series-forecasting-with-python/
他们使用日期而不是时间与各自的值。这是帧值的输出:
time_field value_field
0 00:00:14 283.80
1 00:01:14 271.97
2 00:02:14 320.53
3 00:03:14 346.78
4 00:04:14 280.72
5 00:05:14 277.41
6 00:06:14 308.65
7 00:07:14 321.27
8 00:08:14 320.68
9 00:09:14 332.32
【问题讨论】:
你为什么连接到mysql? Pandas 将其抽象出来。 我正在连接到 mysql,因为这是我现在唯一可用的服务器,并且我正在将其格式化为帧输出,因为这是 ARIMA 函数的输入格式 你找到答案了吗? 【参考方案1】:您需要将“time_field”列作为数据框的索引(在 ARIMA 模型中,我们应该始终将日期时间列设置为数据框的索引)
frame=frame.set_index['time_field']
model = ARIMA(frame, order=(5,1,0))
model_fit = model.fit(disp=0)
注意:- 当您设置索引列时,如果索引列有任何重复值,您可能会收到错误。所以在这种情况下,你最好通过求和来分组。
frame = frame.groupby(['time_field']).agg('value_field': 'sum')
or
frame = frame.groupby(['time_field']).sum()
【讨论】:
【参考方案2】:我遇到了类似的问题,我使用 pandas Series
而不是 DataFrame
为我工作,时间戳列作为索引
data = pd.Series(frame.value_fields, index=frame.time_field)
model = ARIMA(data, order=(5,1,0))
model_fit = model.fit(disp=0)
【讨论】:
data = pd.Series(frame.value_fields.values, index=frame.time_field) 为我工作以上是关于Python:“Pandas 数据转换为对象的 numpy dtype。使用 np.asarray(data) 检查输入数据。”的主要内容,如果未能解决你的问题,请参考以下文章