pandas.DataFrame.round() 不在所需位数后截断小数值
pandas.DataFrame.round() not truncating decimal values after desired number of places
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) 不截断小数点后的前 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 浮点格式精确表示(但可能可以在十进制系统中表示)。
在这种情况下,包括四舍五入(到小数位)在内的浮点运算将return一个值,具体取决于所选的四舍五入模式,通常是最接近的浮点数。
这个数字可能略小于带两位小数的实际十进制值,因此在十进制表示法中有很多九。
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) 不截断小数点后的前 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 浮点格式精确表示(但可能可以在十进制系统中表示)。
在这种情况下,包括四舍五入(到小数位)在内的浮点运算将return一个值,具体取决于所选的四舍五入模式,通常是最接近的浮点数。
这个数字可能略小于带两位小数的实际十进制值,因此在十进制表示法中有很多九。