Python Pandas:为什么np.round()将14.50减少到14?

时间:2014-11-17 12:41:14

标签: python pandas numpy rounding

我很惊讶地发现np.round(item, decimals=0)轮次14.5014。我知道这与小数点的数量有关,但我不确定原因。

如何确保14.50之类的数字始终向上舍入15

脚本:

myval = 14.50
np.round(myval, decimals=0)

输出:

14.0

4 个答案:

答案 0 :(得分:3)

如果您使用的是2.x,则默认的python round function应该为正浮动执行所需的操作。

   >>> round(14.5)
   15.0

   >>> round(14.49)
   14.0

不确定最佳做法是什么,但这适用于数据帧和python 2.x:

df = pd.DataFrame([1.5,2.5,3.5])
rounded_df = df.applymap(round)

注意python 2.x的舍入为零,因此它将向下舍入负数。

答案 1 :(得分:2)

numpy rounds to even,这意味着,如果小数部分正好是0.5,则数字被向上舍入,如果整个部分是奇数并向下舍入,如果整个部分是偶数。

答案 2 :(得分:2)

来自等效函数np.around的文档:

  

对于正好在舍入小数值之间的值,Numpy会舍入到最接近的偶数值。因此,由于IEEE浮点标准[R9]中的小数部分的不精确表示以及当以10的幂进行缩放时引入的误差,结果也可能是令人惊讶的1.5和2.5轮到2.0,-0.5和0.5轮到0.0等。

出于这个原因,np.round将14.5减少到14,而不是奇数15。

如果您只想要舍入为整数,则可以改为使用np.ceil

>>> np.ceil(14.5)
15.0

答案 3 :(得分:0)

我知道这是一个老问题,但我想我也有一个可以做你想做的答案。

您可以使用:

>>> np.int32(14.5+0.5)
15