应用于长整数的熊猫 astype 返回截断的结果

问题描述

想知道之前是否有人遇到过这个问题 我正在尝试将数据框中的浮点列转换为整数,但得到了奇怪的结果,这是我的代码

proj_id['test2'] = proj_id['campaign_id'].astype('int64')
proj_id[proj_id['campaign_id']==23847591030830034][['campaign_id','test2']]

enter image description here

所以我的campaign_id是 23847591030830034 变成 23847591030830032

我试图抑制科学表达式,舍入,...但似乎转换从我的整数中截断了一个字节

感谢您的帮助

解决方法

这似乎是代表的问题。

当您建立索引时,您将 23847591030830034 转换为浮点数,然后将其与另一个更准确地表示为 23847591030830032.0 的浮点数进行比较,但差异如此之小以至于四舍五入为相同的浮点数:

>>> floated = float(23847591030830034)
>>> inted = 23847591030830032
>>> floated == float(inted)
True

因此,两个整数的 float representation 似乎相同,因此存在差异。