Numpy Pandas:使用np.round和applymap将数据帧中的值舍入一半
我想了解为什么在同一个DF上使用1)np.round和2)applymap时会得到不同的值 我的df np.四舍五入收益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
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
,numpy1.10.1
以这种方式舍入浮动实际上是无用的,尽管函数的可用性太容易了。在这里舍入的最终目的是什么?@antonprotopovround
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