我正在尝试将 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
如何转换列?
无需更换
nan
。
您可以通过以下方式传递到Int64
安全:
df['A'] = np.floor(pd.to_numeric(df['A'], errors='coerce')).astype('Int64')
您的
nans
将替换为 <NA>
。
来源
你需要有 pandas >.24 版本。
import numpy as np
orginalData[NumericColumns] = orginalData[NumericColumns].fillna(0).astype(np.int64, errors='ignore')
对于 NaN,您需要将 NaN 替换为 0,然后进行类型转换
接受的解决方案并不在所有情况下都是正确的,回复:“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,并且任何下游计算相对于原始数据集都将不准确。
这也可以解决这个问题。
np.floor(df.A).astype('Int64')
数组必须仅包含整数才能安全地将 float 转换为 int 数据类型。如果你坚持的话可以尝试如下:
orginalData[NumericColumns] = orginalData[NumericColumns].astype(int, errors='ignore')
根据您的 pandas 版本,您可以一次安全地转换多个列。您不需要为此使用申请。