【问题标题】:Pandas rounding decimals not working熊猫舍入小数不起作用
【发布时间】:2018-10-23 13:15:54
【问题描述】:

有人可以解释一下我发生了什么还是我错过了一些非常明显的事情?

import pandas as pd
df = pd.DataFrame([[0.0094909865]])
df = df.round(9)
print(df)

这给了我 0.009490986

我期望的取整值为 0.009490987

谁能帮我理解? 我正在使用 Pandas '0.20.3'

【问题讨论】:

    标签: python python-2.7 pandas numpy rounding


    【解决方案1】:

    好问题。这是一个无证的怪癖。实际上,DataFrame.round 使用 numpy.around。应该在pandas documentation中提及。


    numpy.around() 执行以下操作:

    对于恰好介于四舍五入的十进制值之间的值,Numpy 四舍五入到最接近的偶数值。因此 1.5 和 2.5 舍入为 2.0, -0.5 和 0.5 舍入到 0.0 等等。

    有关详细信息,请参阅Reference

    要实现您想要的,您可以执行以下操作:

    from math import ceil, floor
    import pandas as pd
    
    df = pd.DataFrame([[0.0094909865]])
    
    def float_round(num, places = 0, direction = floor):
        return direction(num * (10**places)) / float(10**places)
    
    print( float_round(df.values,9,ceil) )
    print( float_round(df.values,9) )
    
    print( float_round(1.1389182804 ,9) )
    

    结果

    0.009490987
    0.009490986
    
    1.13891828
    

    【讨论】:

    • 谢谢@seralouk,这至少有助于我恢复理智!整个晚上我都在苦苦挣扎,以为我错过了一些相当明显的东西,但很高兴不是我。
    • 知道如何实现我要做的事情 - 像 excel 那样简单的舍入吗?再次感谢。
    • 太棒了,非常感谢。
    • 当我尝试在值 1.1389182804 上使用您的函数时,当我四舍五入到小数点后 9 位时,它给了我 1.138918281 而不是 1.138918280?
    • 是的,我同意。我只是建议了一种方法来满足@Gayathri 的需求。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-08
    • 1970-01-01
    • 1970-01-01
    • 2017-01-04
    • 1970-01-01
    • 2017-05-09
    • 2015-12-24
    相关资源
    最近更新 更多