首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将包含NaNs的Pandas列转换为dtype `int`

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

Stack Overflow用户
提问于 2014-01-22 23:51:28
回答 24查看 276.4K关注 0票数 277

我将数据从.csv文件读取到Pandas数据帧,如下所示。对于其中一列,即id,我希望将列类型指定为int。问题是id系列的值缺失/为空。

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

代码语言:javascript
运行
复制
df= pd.read_csv("data.csv", dtype={'id': int}) 
error: Integer column has NA values

或者,我尝试在阅读后转换列类型,如下所示,但这一次我得到:

代码语言:javascript
运行
复制
df= pd.read_csv("data.csv") 
df[['id']] = df[['id']].astype(int)
error: Cannot convert NA to integer

我该如何解决这个问题呢?

EN

回答 24

Stack Overflow用户

回答已采纳

发布于 2014-01-23 01:42:29

整数列中缺少NaN表示是一个错误( pandas "gotcha" )。

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

票数 241
EN

Stack Overflow用户

发布于 2019-01-15 16:13:25

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

Nullable Integer Data Type

Pandas可以使用arrays.IntegerArray表示可能缺少值的整数数据。这是一个在pandas中实现的扩展类型。它不是整数的默认数据类型,因此无法推断;必须显式地将该数据类型传递给array()Series

代码语言:javascript
运行
复制
arr = pd.array([1, 2, np.nan], dtype=pd.Int64Dtype())
pd.Series(arr)

0      1
1      2
2    NaN
dtype: Int64

对于将列转换为可以为空的整数,请使用:

代码语言:javascript
运行
复制
df['myCol'] = df['myCol'].astype('Int64')
票数 222
EN

Stack Overflow用户

发布于 2018-05-02 18:28:33

我的用例是在加载到DB表之前转换数据:

代码语言:javascript
运行
复制
df[col] = df[col].fillna(-1)
df[col] = df[col].astype(int)
df[col] = df[col].astype(str)
df[col] = df[col].replace('-1', np.nan)

删除NaNs,将其转换为int,再将其转换为str,然后重新插入NANs。

它不是很漂亮,但它完成了工作!

票数 62
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21287624

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档