round()函数在apply()函数中的行为有所不同

时间:2018-08-09 17:22:53

标签: python-3.x pandas dataframe lambda rounding

我从数据框中抓取了一行,如下所示:

https://i.stack.imgur.com/Y9LUE.png

Clicks  Spend   clk_ar  CPC     AdRank  temp    tempRan
36.0    248.76  59.94   6.91    1.67    1.665   1.67

我需要在temp列中用2位数字舍入

选项1:

round(df.temp,2)

OUTPUT:
1676725    1.66
Name: temp, dtype: float64

选项2:

df.temp.apply(lambda x:round(x,2))

OUTPUT:
1676725    1.67
Name: temp, dtype: float64

两个回合函数显示不同的行为。显然,选项1与python 3的行为保持一致。参见Python 3.x rounding behavior

我只是想知道为什么选项2表现得如此。感谢您的帮助!

1 个答案:

答案 0 :(得分:5)

我认为原因在numpy docs

  

注释

     

对于恰好介于四舍五入十进制值中间的值,NumPy   四舍五入到最接近的偶数值。因此1.5和2.5四舍五入为2.0,-0.5   和0.5舍入为0.0,等等。由于   IEEE浮点数中小数部分的不精确表示   标准[1]和以10的幂进行缩放时会引入错误。

在选项1中,您将使用about规则对numpy.float进行四舍五入。

在选项2中,您将舍入一个python float数据类型docs here

带浮点运算的乐趣:

round(1.675, 2)  
1.68

round(2.675, 2) 
2.67