Как исправить: можно сравнивать только объекты серии с одинаковыми метками


Одна ошибка, с которой вы можете столкнуться при использовании pandas:

ValueError : Can only compare identically-labeled DataFrame objects

Эта ошибка возникает, когда вы пытаетесь сравнить два кадра данных pandas, и либо метки индекса, либо метки столбцов не совпадают полностью.

В следующем примере показано, как исправить эту ошибку на практике.

Как воспроизвести ошибку

Предположим, у нас есть следующие два Pandas DataFrames:

import pandas as pd

#define DataFrames
df1 = pd.DataFrame({'points': [25, 12, 15, 14],
 'assists': [5, 7, 13, 12]})

df2 = pd.DataFrame({'points': [25, 12, 15, 14],
 'assists': [5, 7, 13, 12]},
 index=[3, 2, 1, 0])

#view DataFrames
print(df1)

 points assists
0 25 5
1 12 7
2 15 13
3 14 12

print(df2)

 points assists
3 25 5
2 12 7
1 15 13
0 14 12

Обратите внимание, что метки столбцов совпадают, а метки индексов — нет.

Если мы попытаемся сравнить два DataFrames, мы получим ошибку:

#attempt to compare the DataFrames
df1 = df2

ValueError : Can only compare identically-labeled DataFrame objects

Как исправить ошибку

Есть несколько методов, которые мы можем использовать для устранения этой ошибки.

Способ 1: сравнение фреймов данных (включая метки индекса)

Мы можем использовать следующий синтаксис, чтобы сравнить два кадра данных, чтобы увидеть, полностью ли они совпадают (включая метки индекса):

df1.equals(df2)

False

Это говорит нам о том, что два кадра данных не полностью совпадают (включая метки индекса).

Способ 2: сравнить кадры данных (игнорировать метки индекса)

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

df1.reset_index(drop= True ).equals(df2. reset_index(drop= True ))

True

Это говорит нам о том, что два кадра данных полностью совпадают (без учета меток индекса).

Способ 3: сравнение фреймов данных построчно

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

df1.reset_index(drop= True ) == df2. reset_index(drop= True )

 points assists
0 True  True
1 True  True
2 True  True
3 True  True

Это позволяет нам видеть, какие значения совпадают в каждой строке.

Дополнительные ресурсы

В следующих руководствах объясняется, как исправить другие распространенные ошибки в Python:

Как исправить KeyError в Pandas
Как исправить: ValueError: невозможно преобразовать число с плавающей запятой NaN в целое число
Как исправить: ValueError: операнды не могли транслироваться вместе с фигурами

Замечательно! Вы успешно подписались.
Добро пожаловать обратно! Вы успешно вошли
Вы успешно подписались на кодкамп.
Срок действия вашей ссылки истек.
Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.
Успех! Ваша платежная информация обновлена.
Ваша платежная информация не была обновлена.