如何解决 - TypeError: 无法安全地将非等价的 float64 转换为 int64?

问题描述 投票:0回答:5

我正在尝试将 DF 中的一些浮点列转换为 int,但出现上述错误。我尝试过将其转换以及 fillna 为 0(我不喜欢这样做,因为在我的数据集中需要 NA)。

我做错了什么? 我两种都试过了:

orginalData[NumericColumns] = orginalData[NumericColumns].astype('Int64')
#orginalData[NumericColumns] = orginalData[NumericColumns].fillna(0).astype('Int64')

但它一直导致同样的错误

TypeError: cannot safely cast non-equivalent float64 to int64

如何转换列?

python pandas
5个回答
33
投票

无需更换

nan
。 您可以通过以下方式传递到
Int64
安全

df['A'] = np.floor(pd.to_numeric(df['A'], errors='coerce')).astype('Int64')

您的

nans
将替换为
<NA>
来源

你需要有 pandas >.24 版本。


4
投票
import numpy as np
orginalData[NumericColumns] = orginalData[NumericColumns].fillna(0).astype(np.int64, errors='ignore')

对于 NaN,您需要将 NaN 替换为 0,然后进行类型转换


1
投票

接受的解决方案并不在所有情况下都是正确的,回复:“np.floor”。来自以下位置的文档: https://numpy.org/doc/stable/reference/ generated/numpy.floor.html

“标量 x 的下限是最大整数 i,使得 i <= x. It is often denoted as [x]."

这会将 9.99 变为 9.00,并且任何下游计算相对于原始数据集都将不准确。


0
投票

这也可以解决这个问题。

np.floor(df.A).astype('Int64')

-1
投票

数组必须仅包含整数才能安全地将 float 转换为 int 数据类型。如果你坚持的话可以尝试如下:

orginalData[NumericColumns] = orginalData[NumericColumns].astype(int, errors='ignore')

根据您的 pandas 版本,您可以一次安全地转换多个列。您不需要为此使用申请。

© www.soinside.com 2019 - 2024. All rights reserved.