将包含NaNs的Pandas列转换为dtype`int`

我从一个.csv文件读取数据到pandas数据框如下。 对于其中一列,即id ,我想指定列types为int 。 问题是id序列有缺失/空值。

当我试图在阅读.csv时将id列转换为整数时,我得到:

 df= pd.read_csv("data.csv", dtype={'id': int}) error: Integer column has NA values 

另外,我试着转换列types后阅读如下,但这次我得到:

 df= pd.read_csv("data.csv") df[['id']] = df[['id']].astype(int) error: Cannot convert NA to integer 

我该如何解决这个问题?

在整数列中缺乏NaN rep是一个pandas“gotcha” 。

通常的解决方法是简单地使用浮动。

如果您可以修改您存储的数据,请使用标记值来填写缺less的id 。 通过列名称推断的一个常见用例是id是一个严格大于零的整数,您可以使用0作为标记值,​​以便您可以编写

 if row['id']: regular_process(row) else: special_process(row) 

在我的情况下,我已经编辑了csv的列格式,即将列的格式从一般改为数字。然后我能够改变pandas的types。

 df= pd.read_csv("data.csv") df[['id']] = df[['id']].astype(int)