When working with pandas, comparing DataFrames that contain NaN values can be confusing and error prone. By defaultin Python, NaN is not equal to NaN in standard element-wise comparisons, which often leads to unexpected results. Sample data: import numpy as np import pandas as pd df1 = pd.DataFrame([[np.nan,1, np.nan, 3],[2, 1, np.nan,3]]) df2 = df1.copy() 0 1 2 3 0 NaN 1 NaN 3 1 2.0 1 NaN 3 Why NaN breaks equality checks? In NumPy and pandas, NaN represents missing data.