为什么熊猫舍入法不将 0.5 四舍五入到 1?



我发布这个我认为是答案的东西,因为我在这里找不到类似的问答。

我预计熊猫round方法将 0.5 四舍五入为 1。

>>> import pandas as pd
>>> pd.Series([0.5, 1.5, 2.5, 3.5, 4.5]).round()
0    0.0
1    2.0
2    2.0
3    4.0
4    4.0
dtype: float64

更奇怪的是:Python 的 round 方法在 Python 2.7 和 3.6 中有不同的行为:

蟒蛇 2.7:

>>> [round(x) for x in [0.5, 1.5, 2.5, 3.5, 4.5]]
[1.0, 2.0, 3.0, 4.0, 5.0]

蟒蛇 3.6:

>>> [round(x) for x in [0.5, 1.5, 2.5, 3.5, 4.5]]
[0, 2, 2, 4, 4]

这与浮点表示或我的平台(Mac OS X(有关吗?

我相信thisc ase实际上是python中的预期行为,而不是浮点问题。查看文档:

如果两个倍数相等接近,则向偶数选择进行舍入(因此,例如,round(0.5( 和 round(-0.5( 均为 0,round(1.5( 均为 2(

这确实是由于浮点运算,如 Python 3 文档中描述的那样,round()其中指出:

浮点数的round()行为可能令人惊讶:例如,round(2.675, 2)给出了2.67而不是预期的2.68。这不是一个错误:这是由于大多数小数部分不能完全表示为浮点数

最新更新