обработка данных
August 4, 2023

Наглядный способ визуализации разницы в двух таблицах

Рассмотрим, простой метод получения разницы в двух датафреймах. Он идеально подойдет, когда надо убедиться в правильности примененных к таблице преобразований. Создадим демонстрационный датасет:

import pandas as pd

df1 = pd.DataFrame([['id1', 'val1', 'cat1'], ['id2', 'val2', 'cat2'],
                    ['id3', 'val3', 'cat3'], ['id4', 'val4', 'cat4']], 
                   columns=['id', 'val', 'cat'])
df1

Создадим копию таблицы и внесем некоторые изменения:

df2 = df1.copy()
df2.loc[3,'id'] = 'id4_new'
df2.loc[2,'val'] = 'val3_new'

Теперь воспользуемся методом compare:

df1.compare(df2)

С параметрами по умолчанию compare показывает только строки и колонки с различающимися значениями. При этом для каждого столбца слева (self) указывается значение первого датафрейма в заданной строке, а справа (other) - второго. NaN обозначают равные значения.

С параметром keep_equal=True в итоговом датафрейме вместо NaN-ов будут реальные значения:

df1.compare(df2, keep_equal=True)

С keep_shape=True результат будет включать все строки и колонки, а не только различающиеся:

df1.compare(df2, keep_shape=True)

Также можно задать имена подстолбцов, в которых будут содержаться значения ячеек левого и правого датафрейма вместо наименований по умолчанию - 'self', 'other'. Это регулируется параметром result_names:

df1.compare(df2, result_names=('df1', 'df2'))