Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么熊猫取整法不将0.5取整为1?_Python_Pandas_Rounding - Fatal编程技术网

Python 为什么熊猫取整法不将0.5取整为1?

Python 为什么熊猫取整法不将0.5取整为1?,python,pandas,rounding,Python,Pandas,Rounding,我在这里贴了我认为是答案的帖子,因为我在这里找不到类似的问题答案 我希望pandasround方法将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中有不

我在这里贴了我认为是答案的帖子,因为我在这里找不到类似的问题答案

我希望pandas
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中有不同的行为:

Python 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]
Python 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)有关吗?

这确实是由于Python 3中所述,其中指出:

浮动的
round()
行为可能令人惊讶:例如,
round(2.675,2)
给出的是
2.67
而不是预期的
2.68
。这不是一个错误:这是因为大多数小数不能精确地表示为浮点


我相信在这种情况下,它实际上是python中的预期行为,而不是浮点问题。查看以下内容:

如果两个倍数相等,则舍入是朝偶数方向进行的(例如,舍入(0.5)和舍入(-0.5)都是0,舍入(1.5)都是2)


这忽略了为什么0.5向下舍入为0,但1.5向上舍入为2。两个小数都有足够小的数量级,分母都是2的幂,它们都有精确的浮点表示。@chepner的说法自相矛盾。他们说四舍五入将接近最接近的偶数…但他们说,好吧,有时不会,但这不是一个错误。问题是2.675不是2675/1000;这个数字接近267/100和268/100。只有当要舍入的值正好在两个选项之间的一半时,才适用向最近的偶数舍入。哦,我明白了。所以它不是浮点表示。是否有理由将其四舍五入到最近的偶数?“不要说朝向零或远离零的“向上”(我一直认为应该是这样)?”比尔:要知道原因,请读一下dupe。什么是dupe?我再次阅读了Python文档,但找不到原因。但我发现了一个解释:“我认为原因是为了防止平均数字向上或向下偏移。”@Bill,为了将来的参考,“dupe”是“duplicate”的缩写。谢谢@root。无论出于什么原因,当我搜索这个问题时,或者甚至在我写这个问题的时候,在类似的帖子列表中,现有的问题都没有出现。