别写df1 == df2(这是逐个元素相比较)。
要写assert_frame_equal。不仅能比较两个df是否相等,还能告诉你哪里不一样。
assert_frame_equal是比较两个df是否完全一模一样。index都要一样!
比较内容时,忽略数据类型,可选参数 check_dtype=False
import pandas as pd
import numpy as np
from pandas.testing import assert_frame_equal
df1 = pd.DataFrame(np.arange(12).reshape(3, -1))
df2 = pd.DataFrame(np.arange(12).reshape(3, -1))
df1 == df2
assert_frame_equal(df1, df2)
没有问题。
换一个df3,2行1列的元素和df1不一样
报错啦。
还会比较index
其他参数,可以参考相关API:pandas.testing.assert_frame_equal — pandas 1.5.2 documentation
比如,近似约等于的比较。
from pandas._testing import assert_frame_equal
assert_frame_equal(left=df2[check_columns], right=df1[check_columns], check_dtype=False, check_names=False, rtol=1e-4)
pandas.testing.
assert_frame_equal
(left, right, check_dtype=True, check_index_type='equiv', check_column_type='equiv', check_frame_type=True, check_less_precise=False, check_names=True, by_blocks=False, check_exact=False, check_datetimelike_compat=False, check_categorical=True, check_like=False, obj='DataFrame')