Como corrigir: só é possível comparar objetos seriais rotulados de forma idêntica


Um erro que você pode encontrar ao usar pandas é:

 ValueError : Can only compare identically-labeled DataFrame objects

Este erro ocorre quando você tenta comparar dois DataFrames do pandas e os rótulos de índice ou rótulos de coluna não correspondem perfeitamente.

O exemplo a seguir mostra como corrigir esse erro na prática.

Como reproduzir o erro

Vamos supor que temos os dois DataFrames panda a seguir:

 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)

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

print (df2)

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

Observe que os rótulos das colunas correspondem, mas os rótulos dos índices não.

Se tentarmos comparar os dois DataFrames, receberemos um erro:

 #attempt to compare the DataFrames
df1 = df2

ValueError : Can only compare identically-labeled DataFrame objects

Como corrigir o erro

Existem alguns métodos que podemos usar para resolver esse erro.

Método 1: compare DataFrames (incluindo rótulos de índice)

Podemos usar a seguinte sintaxe para comparar os dois DataFrames e ver se eles são uma correspondência perfeita (incluindo rótulos de índice):

 df1. equals (df2)

False

Isto nos diz que os dois DataFrames não combinam perfeitamente (incluindo os rótulos do índice).

Método 2: comparar DataFrames (ignorar rótulos de índice)

Podemos usar a seguinte sintaxe para comparar os dois DataFrames para ver se eles são uma correspondência perfeita, ignorando completamente os rótulos do índice:

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

True

Isso nos diz que os dois DataFrames combinam perfeitamente (ignorando os rótulos de índice).

Método 3: compare DataFrames linha por linha

Podemos usar a seguinte sintaxe para comparar os dois DataFrames linha por linha para ver quais valores de linha correspondem:

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

      assist points
0 True True
1 True True
2 True True
3 True True

Isso nos permite ver quais valores correspondem em cada linha.

Recursos adicionais

Os tutoriais a seguir explicam como corrigir outros erros comuns em Python:

Como corrigir KeyError em Pandas
Como corrigir: ValueError: não é possível converter float NaN em int
Como corrigir: ValueError: os operandos não puderam ser transmitidos com formas

Add a Comment

O seu endereço de email não será publicado. Campos obrigatórios marcados com *