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

含np.nan的Pandas DataFrame断言相等问题求助

Pandas DataFrame对比:为什么==无法处理NaN,而pd.testing.assert_frame_equal可以?
  • 核心原因:NaN的特殊特性
    按照IEEE浮点数标准,np.nan不等于任何值,包括它自己——np.nan == np.nan的结果是False。当你用df1 == df2对比DataFrame时,所有NaN的位置都会返回False,这直接导致后续的.all().all()返回False,让你误以为两个DataFrame不相等。

  • 你的代码输出验证
    运行print((df1 == df2))会得到如下结果:

    A      B
    0  True  False
    1  True  False
    

    可以看到列B的两个NaN对比都返回了False,这就是第一个方法测试不通过的直接原因。

  • pd.testing.assert_frame_equal的优势
    这个测试方法是Pandas专门用来断言DataFrame完全相等的工具,默认会将两个NaN视为相等(可通过参数调整对比规则)。它不仅对比数据内容,还会检查列名、索引、数据类型等结构信息,能正确处理包含NaN的场景,所以你的第二个测试能通过。

  • 替代简化方案
    如果不需要复杂的断言校验(比如只看内容是否一致),可以直接用df1.equals(df2),这个方法同样会正确处理NaN:

    print(df1.equals(df2))  # 输出 True
    

内容的提问来源于stack exchange,提问作者ktj1989

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 05:39:53