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