【发布时间】:2014-02-12 18:54:50
【问题描述】:
我从 .csv 文件读取数据到 Pandas 数据框,如下所示。对于其中一列,即id,我想将列类型指定为int。问题是id 系列有缺失/空值。
当我在读取 .csv 时尝试将 id 列转换为整数时,我得到:
df= pd.read_csv("data.csv", dtype={'id': int})
error: Integer column has NA values
或者,我在阅读后尝试转换列类型,但这次我得到:
df= pd.read_csv("data.csv")
df[['id']] = df[['id']].astype(int)
error: Cannot convert NA to integer
我该如何解决这个问题?
【问题讨论】:
-
我认为如果缺少/NaN 值,整数值无法转换或存储在系列/数据框中。我认为这与 numpy 兼容性有关(我在这里猜),如果您想要缺少值兼容性,那么我会将值存储为浮点数
-
见这里:pandas.pydata.org/pandas-docs/dev/…;当您缺少值时,您必须有一个 float dtype(或者技术上是 object dtype,但效率低下);您使用 int 类型的目标是什么?
-
我相信这是一个 NumPy 问题,并非特定于 Pandas。很遗憾,因为在很多情况下,使用允许 null 值的可能性的 int 类型比一大列浮点数更有效。
-
我也有这个问题。我有多个数据框,我想根据几个“整数”列的字符串表示来合并它们。但是,当其中一个整数列具有 np.nan 时,字符串转换会产生一个“.0”,这会引发合并。只是让事情稍微复杂一些,如果有简单的解决方法会很好。
-
@Rhubarb,可选的可空整数支持现已正式添加到 pandas 0.24.0 - 终于 :) - 请在下面找到更新的答案。 pandas 0.24.x release notes