【发布时间】:2021-04-17 05:10:48
【问题描述】:
希望有一个非常简单的解决方案。我已经尝试了关于 SO 的两个类似问题的解决方案,但这些对我没有用。
基本上我有一个过程来评估数据帧的两列中的数字是否相等。对于绝大多数人来说,这似乎是正确的。但是,在极少数情况下,看似相等的数字(精确到小数点后 6 位)显示为不相等。
显然,这取决于我的数字的存储方式与我所看到的情况。但奇怪的是,这些数字的数据源只将它们存储为 6dp,并且尝试增加 display.precision 并没有任何效果 - 我仍然只看到 6dp。
a=df[df['Timestamp']=='2018-03-04 22:29:57']['Limit'].copy()
b=df[df['Timestamp']=='2018-03-04 22:29:57']['Quote'].copy()
pd.options.display.precision
Out[152]: 10
a
Out[153]:
15571027 25.850000
Name: Limit, dtype: float64
b
Out[154]:
15571027 25.850000
Name: Quote, dtype: float64
a==b
Out[155]:
15571027 False
dtype: bool
a-b
Out[156]:
15571027 -0.000000
dtype: float64
b>a
Out[157]:
15571027 True
dtype: bool
我希望某个善良的灵魂能够建议我可以在这里尝试的下一个逻辑步骤 - 显然 b 大于 a,但是 1)我无法显示这个,并且 2)我最终想创建布尔比较我知道会准确到与我显示的相同的精度。
非常感谢!
【问题讨论】:
-
尝试将您的数据四舍五入到您显示的精度,如果这适合您的话
-
是的,这是有道理的。但我真的很想进一步了解我的浮点数是如何存储的,以及为什么布尔比较会在这里产生意想不到的结果。
-
"看似相等的数字" --> 将 float64 打印到 17 个 有效 位以查看它们是否相等。 绝对/固定精度的 6 位肯定不够。
标签: python pandas floating-point boolean