我将数据从.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,你可以使用'object'数据类型:

df['col'] = (
    df['col'].fillna(0)
    .astype(int)
    .astype(object)
    .where(df['col'].notnull())
)

这将用一个整数替换nan(不管哪个),转换为int,转换为object,最后重新插入nan。

其他回答

因为我在这里没有看到答案,我不妨加上它:

如果你因为某种原因仍然不能处理np,可以用一行程序将nan转换为空字符串。Na或者pd。我和我一样,在使用旧版本的熊猫库时:

df select_dtypes(“当家”)。astype (str) fillna(- 1)。replace(“- 1”、“)

使用pd.to_numeric ()

df["DateColumn"] = pd.to_numeric(df["DateColumn"])

简单干净

几周前,我遇到了一些离散的功能被格式化为“对象”的问题。这个解决方案似乎奏效了。

for col in discrete:
    df[col] = pd.to_numeric(df[col],errors='coerce').astype(pd.Int64Dtype())
df.loc[~df['id'].isna(), 'id'] = df.loc[~df['id'].isna(), 'id'].astype('int')

现在可以创建一个包含nan的pandas列作为dtype int,因为它现在正式添加在pandas 0.24.0上

熊猫0.24。X发行说明 引用:“Pandas已经获得了保存缺少值的整型dtypes的能力