Зачем получать разные результаты при сравнении двух фреймов данных? - PullRequest
1 голос
/ 22 октября 2019

Я сравниваю два df, это дает мне False при использовании .equals(), но если я добавляю два df вместе и использую drop_duplicate(), это ничего не дает мне. Может кто-нибудь объяснить это?

Ответы [ 2 ]

2 голосов
/ 22 октября 2019

TL; DR

Это совершенно разные операции, и я бы никогда не ожидал, что они дадут одинаковые результаты.

pandas.DataFrame.equals

Вернет логическое значениезначение в зависимости от того, определяет ли Pandas, что сравниваемые кадры данных являются «одинаковыми». Это означает, что индекс одного «совпадает» с индексом другого, столбцы одного «совпадают» со столбцами другого, а данные одного «совпадают» с даннымидругое.

См. документы

Это НЕ то же самое, что pandas.DataFrame.eq, который вернет фрейм данных булевых значений.

Настройка

Рассмотрим эти три кадра данных

df0 = pd.DataFrame([[0, 1], [2, 3]], [0, 1], ['A', 'B'])
df1 = pd.DataFrame([[1, 0], [3, 2]], [0, 1], ['B', 'A'])
df2 = pd.DataFrame([[0, 1], [2, 3]], ['foo', 'bar'], ['A', 'B'])

df0              df1              df2      

   A  B             B  A               A  B
0  0  1          0  1  0          foo  0  1
1  2  3          1  3  2          bar  2  3

Если мы проверили, было ли df1 от equals до df0, мы получили

df0.equals(df1)

False

Даже если все элементы одинаковы

df0.eq(df1).all().all()

True

И это потому, что столбцы не выровнены. Если я сортирую столбцы, то ...

df0.equals(df1.sort_index(axis=1))

True

pandas.DataFrame.drop_duplicates

Сравнивает значения в строках и не заботится об индексе.

Итак, оба из них дают одинаково выглядящие результаты

df0.append(df2).drop_duplicates()

и

df0.append(df1, sort=True).drop_duplicates()

   A  B
0  0  1
1  2  3

Когда я append (или pandas.concat), Панды выровняют столбцы и добавят добавленныефрейм данных как новые строки. Тогда drop_duplicates делает свое дело. Но именно внутреннее выравнивание столбцов делает то, что я делал выше с sort_index и axis=1.

0 голосов
/ 22 октября 2019

может быть строки в обоих фреймах данных упорядочены не одинаково? кадры данных будут равны, если строки, соответствующие одному и тому же индексу, совпадают

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...