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'。
浮点数不是精确的,不是每个数字都可以准确表示。不能用有限的十进制数精确表示1/3
的方式相同,有许多数字不能以IEEE浮点格式精确表示(但是在十进制系统中可以表示)。
在这种情况下,包括舍入(到小数位)的浮点运算,将根据所选的舍入模式返回一个值,通常是最接近的浮点数。
此数字可能略小于实际的十进制值,并带有两个小数位,因此十进制表示法中有很多9。