我从数据框中抓取了一行,如下所示:
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表现得如此。感谢您的帮助!
答案 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