首页 > 解决方案 > Pandas:定义新列的类型

问题描述

我的目标是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? 如何避免这种行为?

标签: pythonpandasdataframe

解决方案


如果您使用 DataFrame.append 添加数据,则从您添加数据的位置保留数据类型。

您可以通过将 dtypes 显式分配给列来避免这种行为。例如

data_for_csv.event_id=data_for_csv.event_id.astype(int)

推荐阅读