You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中如何比较两个DataFrame的列值?相同浮点数判定为False该怎么解决

问题产生原因

你遇到的是典型的浮点数精度存储误差问题。十进制小数31.32转换为二进制存储时会出现无限循环,Python底层存储时会自动截断尾数位,导致两个表面看起来数值完全一致的浮点数,实际存储的二进制值存在非常微小的差异,直接用==做精确相等判断时就会返回False。

解决办法

不要用==做浮点数的相等判断,改用支持误差容限的比对逻辑即可,常用两种实现方案:

  1. 用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')
  1. 如果要求严格比对保留两位小数后的结果,可以先对两个列做统一的四舍五入后再判断相等:
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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 14:24:01