如何忽略pandas assert frame equal的索引比较

Lis*_*isa 17 python pandas

我尝试将下面的两个数据帧与"check_index_type"设置为False进行比较.根据文档,如果设置为False,则不应"检查Index类,dtype和inferred_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')
Run Code Online (Sandbox Code Playgroud)

WeN*_*Ben 21

指数是数据帧的一部分,如果该指数是不同的,应该说dataframes是不同的,DFS的甚至价值是一样的,所以,如果你想查询的值,使用array_equalnumpy

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
Run Code Online (Sandbox Code Playgroud)

有关更多信息assert_frame_equal混帐

  • 要回答assert_frame_equal部分,check_index_type只忽略索引的数据类型,而不是值本身.所以标志不等于'忽略索引值' (5认同)
  • 但是,这只会检查值,而不是列名。对于只应检查索引的用例,我认为最好使用assert_frame_equal(df1.reset_index(drop = True),...) (2认同)

The*_*inn 17

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

assert_frame_equal(d1.reset_index(drop=True), d2.reset_index(drop=True))
Run Code Online (Sandbox Code Playgroud)


One*_*Day 11

pd.testing.assert_series_equal对于那些因为对使用(operates on )感兴趣而提出这个问题的人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)
Run Code Online (Sandbox Code Playgroud)

对于 来说,这个论点尚不存在pd.testing.assert_frame_equals