pandas 如何解决- TypeError:无法安全地将不等效的float 64强制转换为int 64?

iyfjxgzm  于 2023-02-17  发布在  其他
关注(0)|答案(4)|浏览(298)

我尝试在DF中将一些float列转换为int,但我遇到了以上错误。我尝试了将其转换为0以及将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

我可以做些什么来转换列?

klr1opcd

klr1opcd1#

无需替换nan。您可以通过执行以下操作**安全地传递到Int64

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

您的nans将替换为<NA>Source
你需要有Pandas〉.24版本.

woobm2wo

woobm2wo2#

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

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

iyfamqjs

iyfamqjs3#

所接受的解并非在所有情况下都是正确的,请回复:“np.floor”。来自以下位置的文档:https://numpy.org/doc/stable/reference/generated/numpy.floor.html
标量x的下限是最大整数i,使得i〈= x。它通常表示为[x]。
这将使9.99变为9.00,并且任何下游计算相对于原始数据集将是不准确的。

yfwxisqw

yfwxisqw4#

数组必须只包含整数才能安全地将float转换为int dtype。如果您坚持,可以尝试如下操作:

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

根据你的panda版本,你可以安全地一次转换多个列,你不需要使用apply。

相关问题