2016-05-17 69 views
3

这是一个错误?当我四舍五入时,它实际上返回不同的结果。熊猫四舍五入,这是一个错误?

import pandas as pd 
pd.set_option('precision', 10) 

pd.DataFrame([[1.446450001],[1.44645]]).round(4) 

结果

0 
0 1.4465 
1 1.4464 
+1

不是一个错误。 1.44645可能会以二进制形式存储为下舍入。 – piRSquared

+0

@piRSquared我该如何解决这个问题? – JOHN

+2

@piRSquared不,这是错误的。这是关于舍入策略 – MaxNoe

回答

5

这是不是一个错误 - 更确切地说,这是一个无证的怪癖。

DataFrame.round使用罩,其中下numpy.around:

对于值圆形十进制值的正中间,numpy的舍入到最接近偶数值。因此1.5和2.5圆至2.0,-0.5和0.5圆为0.0,等等

http://docs.scipy.org/doc/numpy-1.10.1/reference/generated/numpy.around.html

更多读数@百科:https://en.wikipedia.org/wiki/Rounding#Round_half_to_even

+1

修补程序在熊猫'round'文档中添加注释非常受欢迎:-)(https://github.com/pydata/pandas/blob/master/.github/CONTRIBUTING.md) – joris

+0

您应该添加信息关于为什么这样做 – MaxNoe

2

有两个不同的舍入策略

  • 像你这样的第一轮可能已经在学校中学到了它,在一段时间(以5结尾)的值的一半处向上取整

  • 第二回合下一甚至

第一个策略有副作用,你在平均有正偏差,因为中心始终关注更高。这是由第二个策略固定的,随意决定舍入到下一个偶数值。

熊猫选择使用numpy.around它实现了第二个策略。

+1

有没有一所学校在熊猫学习四舍五入? – JOHN