四舍五入的小熊猫无效

时间:2018-05-13 21:31:11

标签: python python-2.7 pandas numpy rounding

有人可以解释一下我发生了什么,或者我错过了一些非常明显的东西?

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

这给了我 0.009490986

我期待 0.009490987

的舍入值

有人可以帮助我理解吗? 我正在使用熊猫的0.20.3'

1 个答案:

答案 0 :(得分:5)

好问题。这是一个无证的怪癖。实际上,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