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

新手上路,请多包涵

我从 .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

我该如何解决这个问题?

原文由 Zhubarb 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 733
2 个回答

整数列中缺少 NaN 代表是 熊猫“陷阱”

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

原文由 Andy Hayden 发布,翻译遵循 CC BY-SA 4.0 许可协议

在 0.24.+ 版本中,pandas 获得了保存具有缺失值的整数数据类型的能力。

可为空的整数数据类型

Pandas 可以使用 arrays.IntegerArray 表示可能缺失值的整数数据。这是在 pandas 中实现的扩展类型。它不是整数的默认数据类型,也不会被推断;您必须将 dtype 显式传递给 array()Series

 arr = pd.array([1, 2, np.nan], dtype=pd.Int64Dtype())
pd.Series(arr)

0      1
1      2
2    NaN
dtype: Int64

要将列转换为可为空的整数,请使用:

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

原文由 jezrael 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题