pandas.DataFrame.round()在所需位数后不截断十进制值

问题描述 投票:1回答:1

pandas.DataFrame.round()在下面的数据帧上提供了一些不可预测的输出。谁能帮我了解这里发生的事情吗?

df = pd.DataFrame([(61.21, 69.32), (65.1938, .67)], columns=['A', 'B'], dtype='float32')
df.round(2)

以上代码输出:

           A      B
0  61.209999  69.32
1  65.190002   0.67

为什么round(2)不能截断小数点后的所有数字,而是截断前两位数字?当我尝试使用dtype ='float64'时,它的工作原理如下:

df.astype('float64').round(2) 
       A      B
0  61.21  69.32
1  65.19   0.67

数据框中的值是否存在某些内容?

我不想将输出格式化为字符串(round(2).applymap('{:。2f}'。format))以获取所需的小数位数。我想知道为什么这些列在小数点后给出不同的位数。

我正在使用pandas版本'0.24.1'。

python pandas dataframe floating-point rounding
1个回答
0
投票

浮点数不是精确的,不是每个数字都可以准确表示。不能用有限的十进制数精确表示1/3的方式相同,有许多数字不能以IEEE浮点格式精确表示(但是在十进制系统中可以表示)。

在这种情况下,包括舍入(到小数位)的浮点运算,将根据所选的舍入模式返回一个值,通常是最接近的浮点数。

此数字可能略小于实际的十进制值,并带有两个小数位,因此十进制表示法中有很多9。

© www.soinside.com 2019 - 2024. All rights reserved.