熊猫:定义新列的类型

时间:2019-08-09 08:13:00

标签: python pandas dataframe

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

2 个答案:

答案 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”的区别。

  

此处的文档:

     

Series.astype

     

Nullable integer