【问题标题】:pandas astype applied to long integer returns a truncated result应用于长整数的 pandas astype 返回截断的结果
【发布时间】:2021-08-30 04:21:26
【问题描述】:

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

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

所以我的campaign_id 是 23847591030830034 变为 23847591030830032

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

感谢您的帮助

【问题讨论】:

    标签: python pandas type-conversion integer scientific-notation


    【解决方案1】:

    这似乎是一个表示问题。

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

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

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

    【讨论】:

    • 谢谢 Sophros !你知道如何解决这个问题,因为我需要确切的 ID 用于我的项目目的
    • 一开始就存储为int64
    • 我使用 pd.read_sql 从数据库中提取数据,并以科学计数法浮点数呈现结果
    • 主要问题是数据库中的列是否为浮动类型格式(如果不是,您可以在读取数据时向熊猫添加类型提示),以及另一个 - 即使它是浮动的数据库 - 它是独一无二的吗?如果是这样,那么是否存在代表问题并不重要。将列转换为 int64 后应该没问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-28
    • 2019-04-18
    • 1970-01-01
    • 1970-01-01
    • 2016-06-22
    • 2015-12-13
    • 1970-01-01
    相关资源
    最近更新 更多