2015-10-19 3 views
1

Имеет ли значение нумерации индекса при тестировании равенства данных? У меня есть 2 идентичных кадра данных с точно такими же данными и столбцами. Единственное отличие состоит в том, что номера индексов для каждой строки различны, а методы equals возвращают значение False. Как я могу обойти это? Вот мои данные кадрыPandas DataFrame равенство - нумерация индексов

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 
+0

Возможный дубликат [панды DataFrames с Nans сравнения равенства] (http://stackoverflow.com/questions/19322506/pandas- dataframes-with-nans-comparation) – hellpanderrr

ответ

1

Вы можете использовать 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_frame_equals:

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

как в этом related answer.

Как Джефф указывает вы можете использовать .equals, который делает это:

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

check_names = False не работает здесь по какой-то причине. Идея сортировки хорошая! Я тестирую их и опубликую обновление (и принимаю ваш ответ). – karmanaut

+0

'check_names' проверяет имена индексов, которые, как мне кажется, не влияют на ваше дело, так как у вас нет имен индексов. –

+0

О, вы хотели использовать assert после сброса индекса? Он не работает, не отбрасывая индекс. – karmanaut

Смежные вопросы