如何忽略熊猫断言帧相等的索引比较



我尝试比较下面两个"check_index_type"设置为False的数据帧。根据文档,如果设置为False,则不应"检查Index类、dtype和infered_type是否相同"。我误解了文件吗?如何比较忽略索引和以下测试返回True?

我知道我可以重置索引,但不喜欢。

https://pandas.pydata.org/pandas-docs/stable/generated/pandas.testing.assert_frame_equal.html

from pandas.util.testing import assert_frame_equal
import pandas as pd
d1 = pd.DataFrame([[1,2], [10, 20]], index=[0,2])
d2 = pd.DataFrame([[1, 2], [10, 20]], index=[0, 1])
assert_frame_equal(d1, d2, check_index_type=False)

AssertionError: DataFrame.index are different
DataFrame.index values are different (50.0 %)
[left]:  Int64Index([0, 2], dtype='int64')
[right]: Int64Index([0, 1], dtype='int64')

如果你真的不在乎索引相等,你可以按如下方式删除索引:

assert_frame_equal(d1.reset_index(drop=True), d2.reset_index(drop=True))

索引是数据帧的一部分,如果索引不同,我们应该说数据帧不同,甚至dfs的值也相同,所以,如果你想检查值,请使用numpy中的array_equal

d1 = pd.DataFrame([[1,2], [10, 20]], index=[0,2])
d2 = pd.DataFrame([[1, 2], [10, 20]], index=[0, 1])
np.array_equal(d1.values,d2.values)
Out[759]: True

有关git 中assert_frame_equal的更多信息

对于那些因为对使用pd.testing.assert_series_equal(在pd.Series上操作(感兴趣而提出这个问题的人,pandas 1.1.0引入了一个参数check_index:

import pandas as pd
s1 = pd.Series({"a": 1})
s2 = pd.Series({"b": 1})
pd.testing.assert_series_equal(s1, s2, check_index=False)

对于pd.testing.assert_frame_equals,此参数尚不存在。

最新更新