Numpy Pandas:使用np.round和applymap将数据帧中的值舍入一半

Numpy Pandas:使用np.round和applymap将数据帧中的值舍入一半,numpy,pandas,decimal,rounding,Numpy,Pandas,Decimal,Rounding,我想了解为什么在同一个DF上使用1)np.round和2)applymap时会得到不同的值 我的df np.四舍五入收益 np.round(df1, 1) total cat1 25.2 cat2 3.6 cat3 76.6 cat4 36.5 cat5 45.6 appymap返回 df1.applymap(lambda x: round(x,1)) total cat1 25.2 cat2 3.5 cat3 76.5 cat4

我想了解为什么在同一个DF上使用1)np.round和2)applymap时会得到不同的值

我的df

np.四舍五入收益

np.round(df1, 1)
      total
cat1   25.2
cat2    3.6
cat3   76.6
cat4   36.5
cat5   45.6
appymap返回

df1.applymap(lambda x: round(x,1))
      total
cat1   25.2
cat2    3.5
cat3   76.5
cat4   36.5
cat5   45.6

如您所见,np.round向上取整一半的值,而applymap向下取整。发生了什么?

这是python 2中记录的行为:在python 3中,您会得到相同的结果:

In [63]:
np.round(df1['total'], 1)

Out[63]:
cat1    25.2
cat2     3.6
cat3    76.6
cat4    36.5
cat5    45.6
Name: total, dtype: float64

In [69]:
df1.applymap(lambda x: round(x,1))

Out[69]:
      total
cat1   25.2
cat2    3.6
cat3   76.6
cat4   36.5
cat5   45.6

文档对这种行为很清楚:我对这两种方法都有相同的值,python
3.4.3
,numpy
1.10.1
以这种方式舍入浮动实际上是无用的,尽管函数的可用性太容易了。在这里舍入的最终目的是什么?@antonprotopov
round
python 3:和2:@EdChum的行为不同是的,谢谢。但是OP没有提到任何python版本。一个吹毛求疵的地方是:Python3的
round
np。around
对于中间情况并不总是给出相同的结果:理论上,
np.around
确实与偶数成圆关系,但在实践中,它有一个不正确的四舍五入实现,而有时会使中间情况出错。Python的
round
是正确的四舍五入,所以应该总是给出正确的结果(如果不是,那就是一个可报告的bug)。例如,将
np.around(0.025,2)
round(0.025,2)
进行比较。(二者都应该是四舍五入的,因为使用二进制浮点WYSINWYG和
0.025
实际上是
0.025000000000013877780781445675529539585113525390625
)@MarkDickinson这很有趣,也很有效,我觉得这是由于python 2的不同,但OP没有响应
In [63]:
np.round(df1['total'], 1)

Out[63]:
cat1    25.2
cat2     3.6
cat3    76.6
cat4    36.5
cat5    45.6
Name: total, dtype: float64

In [69]:
df1.applymap(lambda x: round(x,1))

Out[69]:
      total
cat1   25.2
cat2    3.6
cat3   76.6
cat4   36.5
cat5   45.6