将NaN转换为pandas Series中的int
我在一个数据列里有缺失值,所以当我用命令 dataframe.colname.astype("int64")
时出现了错误。
有没有什么解决办法?
1 个回答
0
在使用 pd.Series
时,数据类型(dtype
)对实际使用的影响很小。
你可以创建一个包含整数的 pd.Series
,并把 dtype
设置为 object
,这样你仍然可以对这个 pd.Series
做同样的操作。
不过,如果你手动设置了 pd.Series
的 dtypes
,pandas 会开始转换 pd.Series
里的内容。根据我的经验,这样做只会让事情变得混乱。
不要把 dtypes
当作关系数据库中的字段类型,它们并不是同一回事。
如果你想在一个 pd.Series
中混合整数和 NaN
或 None
,只需把 dtype
设置为 object
。
把 dtype
设置为 float
可以让你同时拥有整数和 NaN
的浮点表示。但要记住,float
在表示上可能会有一些不准确的情况。
一个常见的陷阱是 dtypes
在 pd.merge
操作中,如果用于合并的键有不同的 dtypes
,比如 int
和 object
,即使 object
里只包含整数,合并也会悄悄失败。
其他解决方法
- 你可以使用
Series.fillna
方法,用一些不太可能出现的值来填充你的NaN
值,比如0
或-1
。 - 把
NaN
复制到一个新列中,像这样df['was_nan'] = pd.isnull(df['floatcol'])
,然后再使用Series.fillna
方法。这样你就不会丢失任何信息。 - 在调用
Series.astype()
方法时,给它加上关键字参数raise_on_error=False
,如果转换失败就使用当前的dtype
。因为dtypes
其实并没有那么重要。
总结一下:
不要太关注“正确的 dtype”,dtypes
是很奇怪的。关注你希望这一列实际能做什么。 dtype=object
是可以的。