我将数据从.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
我该如何解决这个问题呢?
发布于 2014-01-23 01:42:29
整数列中缺少NaN表示是一个错误( pandas "gotcha" )。
通常的解决方法是简单地使用浮点数。
发布于 2019-01-15 16:13:25
在0.24.+版本中,pandas已经获得了保存缺少值的整数数据类型的能力。
Pandas可以使用arrays.IntegerArray
表示可能缺少值的整数数据。这是一个在pandas中实现的扩展类型。它不是整数的默认数据类型,因此无法推断;必须显式地将该数据类型传递给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')
发布于 2018-05-02 18:28:33
我的用例是在加载到DB表之前转换数据:
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。
它不是很漂亮,但它完成了工作!
https://stackoverflow.com/questions/21287624
复制相似问题