Python中如何比较两个DataFrame的列值?相同浮点数判定为False该怎么解决
问题产生原因
你遇到的是典型的浮点数精度存储误差问题。十进制小数31.32转换为二进制存储时会出现无限循环,Python底层存储时会自动截断尾数位,导致两个表面看起来数值完全一致的浮点数,实际存储的二进制值存在非常微小的差异,直接用==做精确相等判断时就会返回False。
解决办法
不要用==做浮点数的相等判断,改用支持误差容限的比对逻辑即可,常用两种实现方案:
- 用numpy内置的
np.isclose方法做近似相等判断,默认容差为1e-09,完全满足常规业务的小数比对需求,代码修改如下:
reported_claims['Check'] = np.where( np.isclose( reported_claims['Total Claims'].reset_index(drop=True), df['Total Claims'].reset_index(drop=True) ), 'TRUE', 'FALSE')
- 如果要求严格比对保留两位小数后的结果,可以先对两个列做统一的四舍五入后再判断相等:
s1 = reported_claims['Total Claims'].reset_index(drop=True).round(2) s2 = df['Total Claims'].reset_index(drop=True).round(2) reported_claims['Check'] = np.where(s1 == s2, 'TRUE', 'FALSE')
另外注意:使用reset_index(drop=True)的前提是两个DataFrame的行顺序完全对应,否则会出现行比对错位的问题。
内容的提问来源于stack exchange,提问作者newt335
相关产品推荐
相关产品推荐

