DataFrame.compare(other, align_axis=1, keep_shape=False, keep_equal=False, result_names=('self', 'other')) Series.compare(other, align_axis=1, keep_shape=False, keep_equal=False, result_names=('self', 'other'))
other
- объект для сравнения (DataFrame
или Series
).align_axis=1
- по какой оси выровнять сравнение. Если 0 или index
, то различия складываются вертикально, строки выводятся поочередно из self
и other
. Если 1 или columns
, то различия выровнены по горизонтали, столбцы выводятся поочередно из self
и other
.keep_shape=False
- если значение True
, то сохраняются все строки и столбцы. В противном случае сохраняются только те, у которых другие значения.keep_equal=False
- если значение True
, то в результате сохраняются равные значения. В противном случае равные значения отображаются как NAN
. result_names=('self', 'other')
- задает имена DataFrame
/Series
при сравнении.DataFrame
, который показывает различия. Результирующий индекс будет MultiIndex
с поочередным расположением объектов self
и other
на внутреннем уровне..compare()
объектов Series
/DataFrame
:Методы DataFrame.compare()
и Series.compare
сравнивает собственный объект с другим other
объектом (DataFrame
/Series
) и показывает различия.
Когда два DataFrame
/Series
не имеют одинаковых меток или формы, то поднимается исключение ValueError
.
Примечание:
- Совпадающие
NAN
не будут отображаться как разница.- Можно сравнивать только с одинаковыми метками (т.е. одинаковую форму, идентичные метки строк и столбцов)
DataFrame.compare()
:Для иллюстрации работы метода создадим DataFrame
:
>>> import pandas as pd df = pd.DataFrame( { "col1": ["a", "a", "b", "b", "a"], "col2": [1.0, 2.0, 3.0, np.nan, 5.0], "col3": [1.0, 2.0, 3.0, 4.0, 5.0] }, columns=["col1", "col2", "col3"], ) >>> df # col1 col2 col3 # 0 a 1.0 1.0 # 1 a 2.0 2.0 # 2 b 3.0 3.0 # 3 b NaN 4.0 # 4 a 5.0 5.0
Создадим второй DataFrame
из первого с изменениями:
# создадим >>> df2 = df.copy() >>> df2.loc[0, 'col1'] = 'c' >>> df2.loc[2, 'col3'] = 4.0 >>> df2 # col1 col2 col3 # 0 c 1.0 1.0 # 1 a 2.0 2.0 # 2 b 3.0 4.0 # 3 b NaN 4.0 # 4 a 5.0 5.0
Смотрим различия в столбцах:
>>> df.compare(df2) # col1 col3 # self other self other # 0 a c NaN NaN # 2 NaN NaN 3.0 4.0
Присвоим результирующие имена (аргумент result_names
)
>>> df.compare(df2, result_names=("left", "right")) # col1 col3 # left right left right # 0 a c NaN NaN # 2 NaN NaN 3.0 4.0
Теперь распределим различия по строкам (аргумент align_axis=0
):
>>> df.compare(df2, align_axis=0) # col1 col3 # 0 self a NaN # other c NaN # 2 self NaN 3.0 # other NaN 4.0
Сохраним равные значения (аргумент keep_shape=True
):
>>> df.compare(df2, keep_shape=True) # col1 col2 col3 # self other self other self other # 0 a c NaN NaN NaN NaN # 1 NaN NaN NaN NaN NaN NaN # 2 NaN NaN NaN NaN 3.0 4.0 # 3 NaN NaN NaN NaN NaN NaN # 4 NaN NaN NaN NaN NaN NaN
Сохраним все исходные строки и столбцы, а также все исходные значения (аргумент keep_equal=True
):
>>> df.compare(df2, keep_shape=True, keep_equal=True) # col1 col2 col3 # self other self other self other # 0 a c 1.0 1.0 1.0 1.0 # 1 a a 2.0 2.0 2.0 2.0 # 2 b b 3.0 3.0 3.0 4.0 # 3 b b NaN NaN 4.0 4.0 # 4 a a 5.0 5.0 5.0 5.0
Series.compare()
:>>> s1 = pd.Series(["a", "b", "c", "d", "e"]) >>> s2 = pd.Series(["a", "a", "c", "b", "e"])
Смотрим различия в столбцах
>>> s1.compare(s2) # self other # 1 b a # 3 d b
Смотрим различия по индексам
>>> s1.compare(s2, align_axis=0) # 1 self b # other a # 3 self d # other b # dtype: object
Сохраните все исходные строки
>>> s1.compare(s2, keep_shape=True) # self other # 0 NaN NaN # 1 b a # 2 NaN NaN # 3 d b # 4 NaN NaN
Сохраните все исходные строки и все исходные значения
>>> s1.compare(s2, keep_shape=True, keep_equal=True) # self other # 0 a a # 1 b a # 2 c c # 3 d b # 4 e e