熊猫四舍五入小数不起作用



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

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

这给了我0.009490986

我期望四舍五入的值为0.009490987

有人能帮我理解吗? 我正在使用熊猫'0.20.3'

好问题。这是一个没有记录的怪癖。实际上,DataFrame.round使用numpy.around。它应该在熊猫文档中提到。


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

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

有关更多详细信息,请参阅参考。

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

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

最新更新