含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
相关产品推荐
相关产品推荐

