我正在使用以下代码,正如您在第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))
我也试过这个,结果是一样的:
df['avg] = df[["A", "B"]].mean(axis=1).round(2)
答案 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.25
和22.23
- 一个向上舍入,一个向下。然而,Numpy的回合会给你14.26
和22.22
,因为在这些情况下,它会向最近的偶数数字舍入。正如docs中指出的那样:
对于正好在舍入小数值之间的值,NumPy 舍入到最接近的偶数值。因此1.5和2.5轮到2.0,-0.5 由于这个原因,结果也可能是令人惊讶的 IEEE浮点中小数部分的不精确表示 标准[R1011]和以10的幂进行缩放时引入的错误。