将pandas系列浮点dtype转换为整数dtype,同时保留NA值。

4

是否可以将一个包含空值的float64数据类型的数据框的列更改为整数dtype?但是会出现以下错误:

引发ValueError('Cannot convert NA to integer')


1
不,你不能用整数表示“NaN”。 - EdChum
请参阅https://dev59.com/ZmMm5IYBdhLWcg3wivf7#17534682和http://pandas-docs.github.io/pandas-docs-travis/gotchas.html#support-for-integer-na。 - Andy Hayden
1个回答

0

即使你尝试一些变通方法,也不可能实现。通常情况下,NaN在显示缺失值时更有效率。因此人们尝试这样做,让我们看看如果我们尝试相同的操作会发生什么。

  1. 将所有NaN值转换为0(如果您的数据没有此值),如果在您的情况下不可能使用0,则使用非常大的负数或正数,例如9999999999。

    df['x'].dtype 输出:dtype('float64')
    
    df.loc[df['x'].notnull(),'x'] = 9999999999 或 
    
    df.loc[df['x'].notnull(),'x'] = 0
    
  2. 将所有非NaN值仅转换为int。

    df['x'] = df['x'].astype('int64') 转换为int64,现在dtype为int64。
    
  3. 将NaN值放回:

    df.loc[df['x']==0,'x'] = np.nan
    df['x'].dtype
    

    输出:dtype('float64')

上述技巧也可用于将浮点列转换为整数列,如果它包含NaN并引发错误。但是无论如何,您都必须失去NaN。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接