代码之家  ›  专栏  ›  技术社区  ›  pookie

为什么pandas.dataframe.iloc转换为numpy.float64和round?

  •  2
  • pookie  · 技术社区  · 6 年前

    以这个数字为例:

    1.64847910404205
    

    如果我创建一个pandas数据框,其中包含一行和此值:

    df = pd.DataFrame([{'id': 77, 'data': 1.64847910404205}])
    

    然后遍历行(好的…并检查:

    for index, row in df.iterrows():
        if index > 0:
            previous_row = df.iloc[index]
    

    当然,上面的情况很奇怪:为什么我要遍历这些行来从df中提取相同的行?算了吧,我把 -1 来说明。

    现在,如果我用 SciView (部分) IntelliJ ) data tab要逐个检查行,我得到:

    row
    data: 1.64847910404205
    
    previous_row
    data: 1.64847910404
    

    注意到 previous_row 已被舍入。这是因为它们有不同的数据类型…

    row: 
    type(row) #float64
    
    previous_row:
    type(previous_row) #numpy.float64
    

    我很想知道:为什么 iloc 转换为 numpy.float64 我怎么能阻止它这样做呢?

    我需要同样的精度水平,我稍后将做峰值信噪比(psnr)计算。当然,我可以把 float 到A numpy.float64号 ,但我不想失去精确性。

    1 回复  |  直到 6 年前
        1
  •  1
  •   tel    6 年前

    的类型 'data' 数据框中的列是 numpy.float64 ,即使熊猫只报告 float64 . 你可以用下面的方法来证明这一点:

    df['data'].dtype.type is numpy.float64
    

    会回来的 True . 另一种形式是:

    type(df['data'].values[0]) is numpy.float64
    

    也会回来的 .

    显示上的任何差异都取决于 SciView 正在解释您的代码。