在某些情况下,熊猫圆形截断

时间:2018-05-01 10:39:10

标签: python pandas dataframe rounding truncate

我正在使用以下代码,正如您在第2行中看到的那样,舍入是正确的,而在第3行,数据被截断。

import pandas as pd
import numpy as np

data = [[11,10],[17.50,11.01],[21.95,22.5]]
df = pd.DataFrame(data,columns=['A','B'])

df['avg'] = df[["A", "B"]].mean(axis=1)
df['avg_round'] = df['avg'].apply(lambda x: np.round(x, decimals=2)) 

enter image description here

我也试过这个,结果是一样的:

df['avg] = df[["A", "B"]].mean(axis=1).round(2)

1 个答案:

答案 0 :(得分:0)

这不是熊猫问题。查看avg的实际值:

>>> df['avg'][1] 
   14.254999999999999
>>> df['avg'][2]
   22.225000000000001

如果您使用:

df['avg_round'] = df['avg'].apply(lambda x: round(x, 2))

由于浮点表示,您将获得14.2522.23 - 一个向上舍入,一个向下。然而,Numpy的回合会给你14.2622.22,因为在这些情况下,它会向最近的偶数数字舍入。正如docs中指出的那样:

  

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