Метод compare
Метод compare применяется к DataFrame
и сравнивает его с другим DataFrame. В результате
возвращается новый DataFrame, показывающий различия
между исходными таблицами. Первым параметром передаётся
другой DataFrame для сравнения. Вторым параметром
можно задать выравнивание по оси. Третьим параметром
управляют отображением значений из обоих DataFrame.
Синтаксис
df.compare(other[, align_axis][, keep_shape][, keep_equal])
Пример
Создадим два одинаковых DataFrame и применим
к ним метод compare:
import pandas as pd
df1 = pd.DataFrame({
'a': [1, 2, 3, 4, 5],
'b': [10, 20, 30, 40, 50]
})
df2 = pd.DataFrame({
'a': [1, 2, 3, 4, 5],
'b': [10, 20, 30, 40, 50]
})
res = df1.compare(df2)
print(res)
Результат выполнения кода:
Empty DataFrame
Columns: []
Index: []
Поскольку таблицы идентичны, метод вернул пустой DataFrame.
Пример
Теперь создадим таблицы с отличающимися значениями
и применим compare без дополнительных параметров:
import pandas as pd
df1 = pd.DataFrame({
'a': [1, 2, 3, 4, 5],
'b': [10, 20, 30, 40, 50]
})
df2 = pd.DataFrame({
'a': [1, 2, 30, 4, 5],
'b': [10, 20, 30, 40, 50]
})
res = df1.compare(df2)
print(res)
Результат выполнения кода:
a
self other
2 3 30
Результат показывает, что в строке с индексом 2
столбца a значения отличаются: в первом DataFrame
стоит 3, во втором 30.
Пример
При помощи параметра align_axis можно изменить
ориентацию вывода результатов сравнения:
import pandas as pd
df1 = pd.DataFrame({
'a': [1, 2, 3, 4, 5],
'b': [10, 20, 30, 40, 50]
})
df2 = pd.DataFrame({
'a': [1, 2, 30, 4, 5],
'b': [10, 20, 30, 40, 50]
})
res = df1.compare(df2, align_axis=0)
print(res)
Результат выполнения кода:
a
0 self 3
other 30
Теперь значения из двух DataFrame расположены
по строкам, а не по столбцам.
Пример
С помощью параметра keep_shape можно сохранить
размер исходного DataFrame, заполняя совпадающие
ячейки пропусками:
import pandas as pd
df1 = pd.DataFrame({
'a': [1, 2, 3, 4, 5],
'b': [10, 20, 30, 40, 50]
})
df2 = pd.DataFrame({
'a': [1, 2, 30, 4, 5],
'b': [10, 20, 30, 40, 50]
})
res = df1.compare(df2, keep_shape=True)
print(res)
Результат выполнения кода:
a b
self other self other
0 NaN NaN NaN NaN
1 NaN NaN NaN NaN
2 3.0 30.0 NaN NaN
3 NaN NaN NaN NaN
4 NaN NaN NaN NaN
Теперь результат содержит все строки, и только
в строке с индексом 2 столбца a
показаны различия.