我的目标是event_id
不会另存为float
,而是另存为int
。
list_of_event_ids = orders["event_id"].unique().tolist()
print(list_of_event_ids)
此处的输出为[180, 181]
data_for_csv = pd.DataFrame(columns=["ds", "yhat", "yhat_lower", "yhat_upper"])
for event_id in list_of_event_ids:
[...]
forecast = m.predict(future)
# Here I add event_id to the forecast DataFrame
forecast["event_id"] = event_id
new_row_for_data_for_csv = forecast[["event_id", "ds", "yhat", "yhat_lower", "yhat_upper"]].tail(1)
data_for_csv = data_for_csv.append(new_row_for_data_for_csv, ignore_index=True)
print(data_for_csv)
这里的输出是:
ds yhat yhat_lower yhat_upper
0 2019-10-03 04:36:09.982632 180.0 5.826519 3.382635 8.365737
1 2019-10-04 06:28:09.699094 181.0 5.212132 3.529156 12.831940
您能告诉我为什么列表[180, 181]
转换为float
吗?如何避免这种行为?
答案 0 :(得分:2)
如果使用DataFrame.append添加数据,则dtypes将保留在您要追加数据的位置。
您可以通过将dtypes显式分配给列来避免该行为。例如
data_for_csv.event_id=data_for_csv.event_id.astype(int)
答案 1 :(得分:1)
如果要将其转换为int
,只需执行以下操作:
data_for_csv.event_id = data_for_csv.event_id.astype('int64')
我选择了64位表示形式,但您可以将其调整为8、16、32,...
如果您缺少值,则由于NaN为浮点且无法转换为整数,因此将无法使用。
如果您想将缺少值的列转换为整数,Pandas实现了一种方法:
data_for_csv.event_id = data_for_csv.event_id.astype('Int64')
请注意与大写字母“ I”的区别。
此处的文档: