Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 数据帧相等-索引编号_Python_Python 2.7_Pandas - Fatal编程技术网

Python 数据帧相等-索引编号

Python 数据帧相等-索引编号,python,python-2.7,pandas,Python,Python 2.7,Pandas,在测试数据帧相等性时,索引编号是否重要?我有两个完全相同的数据帧,具有完全相同的数据和列。唯一的区别是每行的索引号不同,equals方法返回False。我怎样才能避开这件事?这是我的数据框 A B 0 87 54 1 87 75 2 87 22 3 87 69 A B 418 87 69 107 87 54 108 87 75 250 87 22 您可以使用np.array_equal检查值,但是排序很重要,因此在您的示例中,必须首先按

在测试数据帧相等性时,索引编号是否重要?我有两个完全相同的数据帧,具有完全相同的数据和列。唯一的区别是每行的索引号不同,equals方法返回False。我怎样才能避开这件事?这是我的数据框

   A   B
0  87  54
1  87  75
2  87  22
3  87  69

     A   B
418  87  69
107  87  54
108  87  75
250  87  22

您可以使用
np.array_equal
检查值,但是排序很重要,因此在您的示例中,必须首先按索引排序

In [11]: df1
Out[11]:
    A   B
0  87  54
1  87  75
2  87  22
3  87  69

In [12]: df2
Out[12]:
      A   B
418  87  69
107  87  54
108  87  75
250  87  22

In [13]: df3 = df2.sort()

In [14]: df3
Out[14]:
      A   B
107  87  54
108  87  75
250  87  22
418  87  69

In [15]: np.array_equal(df1, df3)
Out[15]: True

注意:不能比较df1和df2,因为它们有不同的索引:

In [21]: df1 == df2
ValueError: Can only compare identically-labeled DataFrame object
您可以重置索引,但请注意,可能会因此引发异常:

In [22]: df3.reset_index(drop=True)
Out[22]:
    A   B
0  87  54
1  87  75
2  87  22
3  87  69

In [23]: np.all(df1 == df3.reset_index(drop=True))
Out[23]: True
另一个选项是在
assert\u frame\u equals
周围使用try-and-except块:

In [24]: pd.util.testing.assert_frame_equal(df1, df3.reset_index(drop=True))
就像这样

正如Jeff指出的,您可以使用.equals,它可以:

In [25]: df1.equals(df3.reset_index(drop=True))
Out[25]: True

由于某些原因,check_names=False的可能重复在这里不起作用。排序的想法很好!我正在试用它们,并将发布一个更新(并接受您的答案)
check\u names
检查索引名称,我认为这不会影响您的案例,因为您没有任何索引名称。哦,您是想在重置索引后使用assert吗?如果不删除索引,它就无法工作。@AndyHayden我们已经有了
.equals(…)
一段时间了:)@Jeff不确定我之前完成制表时怎么会错过它!:)