Python 为什么数据帧中的值在从int转换为float和back时会发生变化?
当使用“astype(float)”和“astype(int)”时,我的代码中的一系列SKU出现了非常奇怪的行为,我无法解释原因。这似乎只发生在我的本地机器上(我无法在在线Juypter笔记本中复制它) 以下是出现此问题的产品列表以及我正在使用它们创建的DF:Python 为什么数据帧中的值在从int转换为float和back时会发生变化?,python,python-3.x,pandas,Python,Python 3.x,Pandas,当使用“astype(float)”和“astype(int)”时,我的代码中的一系列SKU出现了非常奇怪的行为,我无法解释原因。这似乎只发生在我的本地机器上(我无法在在线Juypter笔记本中复制它) 以下是出现此问题的产品列表以及我正在使用它们创建的DF: products = {'SKU': [1111000120,1111000160,1111000182,1111000210,1111001300,2412601027, 2412601449,517210023
products = {'SKU': [1111000120,1111000160,1111000182,1111000210,1111001300,2412601027,
2412601449,5172100236,5172100370,5172100713,7130104717]}
dfprod = pd.DataFrame.from_dict(products)
当我在本地机器上将此df转换为fload,然后再转换回int时,我得到以下结果:
我发现这个问题处理类似的问题,但是关于C++,所以我不太确定它是如何适用的。
这可能是整数溢出的情况。该值可能超过整数类型的最大大小。这是有道理的。但是为什么它只会发生在我的本地计算机上呢?将您的计算机的
maxsize
与该数据帧中的每个值进行比较:import sys;dfprod.SKU.apply(lambda x:sys.maxsize
?可能是maxsize
小于某些值?我刚刚检查了,不幸的是,这不是解决方案。maxsize是:9223372036854775807我无法在我的机器上重现此行为。您是否碰巧使用了旧的pandas版本?在任何情况下,dfprod.astype(float).astype(np.uint64)
使用numpy整数类型在我的机器上运行良好。