将NaN转换为pandas Series中的int

0 投票
1 回答
1166 浏览
提问于 2025-04-30 05:52

我在一个数据列里有缺失值,所以当我用命令 dataframe.colname.astype("int64") 时出现了错误。

有没有什么解决办法?

暂无标签

1 个回答

0

在使用 pd.Series 时,数据类型(dtype)对实际使用的影响很小。

你可以创建一个包含整数的 pd.Series,并把 dtype 设置为 object,这样你仍然可以对这个 pd.Series 做同样的操作。

不过,如果你手动设置了 pd.Seriesdtypes,pandas 会开始转换 pd.Series 里的内容。根据我的经验,这样做只会让事情变得混乱。

不要把 dtypes 当作关系数据库中的字段类型,它们并不是同一回事。

如果你想在一个 pd.Series 中混合整数和 NaNNone,只需把 dtype 设置为 object

dtype 设置为 float 可以让你同时拥有整数和 NaN 的浮点表示。但要记住,float 在表示上可能会有一些不准确的情况。

一个常见的陷阱是 dtypespd.merge 操作中,如果用于合并的键有不同的 dtypes,比如 intobject,即使 object 里只包含整数,合并也会悄悄失败。

其他解决方法

  1. 你可以使用 Series.fillna 方法,用一些不太可能出现的值来填充你的 NaN 值,比如 0-1
  2. NaN 复制到一个新列中,像这样 df['was_nan'] = pd.isnull(df['floatcol']),然后再使用 Series.fillna 方法。这样你就不会丢失任何信息。
  3. 在调用 Series.astype() 方法时,给它加上关键字参数 raise_on_error=False,如果转换失败就使用当前的 dtype。因为 dtypes 其实并没有那么重要。

总结一下:

不要太关注“正确的 dtype”,dtypes 是很奇怪的。关注你希望这一列实际能做什么。 dtype=object 是可以的。

撰写回答