首页 > 解决方案 > 将 float 转换为 int 处理 Nan 值

问题描述

我有一个csv,如下所示:

db,date,RequestCount,ScheduledCount,PerformedCount,Product
abc,2020-06-01 00:00:00.000,51,22,37,xyz
abc,2020-06-02 00:00:00.000,,11,19,xyz
abc,2020-06-03 00:00:00.000,52,20,36,xyz
abc,2020-06-04 00:00:00.000,37,12,17,xyz
abc,2020-06-05 00:00:00.000,57,23,39,xyz
abc,2020-06-08 00:00:00.000,37,13,28,xyz
abc,2020-06-09 00:00:00.000,48,16,31,xyz
abc,2020-06-10 00:00:00.000,60,24,40,xyz
abc,2020-06-11 00:00:00.000,35,11,,xyz

我正在用 pandas( pd.read_csv) 阅读它。由于这里有两个NaN,列RequestCountPerformedCount被转换为float64.

但我需要所有数字列都是 type integer

我怎样才能做到这一点?

我试过这个,

  1. astype(int)- 在南价值观上失败。

标签: pythonpandas

解决方案


如果您使用的是 pandas ≥1.0,则可以从新的可空整数类型中受益:

df['RequestCount'] = df['RequestCount'].astype('Int64')

注意。注意大写IInt64

输出:

    db                     date  RequestCount  ScheduledCount  PerformedCount Product
0  abc  2020-06-01 00:00:00.000            51              22            37.0     xyz
1  abc  2020-06-02 00:00:00.000          <NA>              11            19.0     xyz
2  abc  2020-06-03 00:00:00.000            52              20            36.0     xyz
3  abc  2020-06-04 00:00:00.000            37              12            17.0     xyz
4  abc  2020-06-05 00:00:00.000            57              23            39.0     xyz
5  abc  2020-06-08 00:00:00.000            37              13            28.0     xyz
6  abc  2020-06-09 00:00:00.000            48              16            31.0     xyz
7  abc  2020-06-10 00:00:00.000            60              24            40.0     xyz
8  abc  2020-06-11 00:00:00.000            35              11             NaN     xyz
>>> df['RequestCount'].isna()
0    False
1     True
2    False
...

推荐阅读