Df.round()正在回归令人沮丧的结果。
在以下示例中,我尝试将小数舍入为五位数。每个小数在小数点后六位有一个5。当我舍入时,我希望第五个十进制值向上舍入。这有时只会发生..
df2 = pd.DataFrame([0.703125, 0.831215])
df2
Out[4]:
0
0 0.703125
1 0.831215
df2.round(5)
Out[5]:
0
0 0.70312
1 0.83122
经过一些谷歌搜索后,听起来问题与浮点数的表示方式有关by the computer。解决这个问题的实用方法是什么?
答案 0 :(得分:4)
你说“我希望第五个十进制值向上舍入”。好的,但在什么情况下呢?鉴于您的示例输入只有6位有效数字,并且Python浮点数(64位)支持大约15位数,您可以安全地添加一小部分数据以获得所需的行为:
(df2 + 1e-12).round(5)
它给出了:
0
0 0.70313
1 0.83122
假设df2
中的最大值小于1000左右,假设6个sigfigs,则最小值小于大约1e-6。添加少量可以确保任何尾随的“5”都被向上舍入,只要您的输入在某个已知范围内,其中小的加法不会使结果不正确。