Comment réparer : ne peut comparer que des objets de série étiquetés de manière identique
Une erreur que vous pouvez rencontrer lors de l’utilisation de pandas est :
ValueError: Can only compare identically-labeled DataFrame objects
Cette erreur se produit lorsque vous tentez de comparer deux DataFrames pandas et que les étiquettes d’index ou les étiquettes de colonne ne correspondent pas parfaitement.
L’exemple suivant montre comment corriger cette erreur dans la pratique.
Comment reproduire l’erreur
Supposons que nous ayons les deux DataFrames pandas suivants :
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
Notez que les étiquettes de colonnes correspondent, mais pas les étiquettes d’index.
Si nous essayons de comparer les deux DataFrames, nous recevrons une erreur :
#attempt to compare the DataFrames
df1 = df2
ValueError: Can only compare identically-labeled DataFrame objects
Comment réparer l’erreur
Il existe quelques méthodes que nous pouvons utiliser pour résoudre cette erreur.
Méthode 1 : comparer les DataFrames (y compris les étiquettes d’index)
Nous pouvons utiliser la syntaxe suivante pour comparer les deux DataFrames afin de voir s’ils correspondent parfaitement (y compris les étiquettes d’index) :
df1.equals(df2)
False
Cela nous indique que les deux DataFrames ne correspondent pas parfaitement (y compris les étiquettes d’index).
Méthode 2 : comparer les DataFrames (ignorer les étiquettes d’index)
Nous pouvons utiliser la syntaxe suivante pour comparer les deux DataFrames afin de voir s’ils correspondent parfaitement, tout en ignorant complètement les étiquettes d’index :
df1.reset_index(drop=True).equals(df2.reset_index(drop=True))
True
Cela nous indique que les deux DataFrames correspondent parfaitement (sans tenir compte des étiquettes d’index).
Méthode 3 : comparer les DataFrames ligne par ligne
Nous pouvons utiliser la syntaxe suivante pour comparer les deux DataFrames ligne par ligne afin de voir quelles valeurs de ligne correspondent :
df1.reset_index(drop=True) == df2.reset_index(drop=True)
points assists
0 True True
1 True True
2 True True
3 True True
Cela nous permet de voir quelles valeurs correspondent dans chaque ligne.
Ressources additionnelles
Les didacticiels suivants expliquent comment corriger d’autres erreurs courantes en Python :
Comment réparer KeyError dans Pandas
Comment réparer : ValueError : impossible de convertir le float NaN en entier
Comment réparer : ValueError : les opérandes n’ont pas pu être diffusés avec les formes