Pandas : Comment comparer deux DataFrames ligne par ligne
Vous pouvez utiliser les méthodes suivantes pour comparer deux DataFrames pandas ligne par ligne :
Méthode 1 : comparer les DataFrames et conserver uniquement les lignes présentant des différences
df_diff = df1.compare(df2, keep_equal=True, align_axis=0)
Méthode 2 : comparer les DataFrames et conserver toutes les lignes
df_diff = df1.compare(df2, keep_equal=True, keep_shape=True, align_axis=0)
Les exemples suivants montrent comment utiliser chaque méthode avec les DataFrames pandas suivants :
import pandas as pd #create first DataFrame df1 = pd.DataFrame({'team': ['A', 'B', 'C', 'D'], 'points': [18, 22, 19, 14], 'assists': [5, 7, 7, 9]}) print(df1) team points assists 0 A 18 5 1 B 22 7 2 C 19 7 3 D 14 9 #create second DataFrame df2 = pd.DataFrame({'team': ['A', 'B', 'C', 'E'], 'points': [18, 30, 19, 20], 'assists': [5, 7, 7, 9]}) print(df2) team points assists 0 A 18 5 1 B 30 7 2 C 19 7 3 E 20 9
Exemple 1 : comparer les DataFrames et conserver uniquement les lignes présentant des différences
Le code suivant montre comment comparer les deux DataFrames ligne par ligne et conserver uniquement les lignes qui présentent des différences dans au moins une colonne :
#compare DataFrames and only keep rows with differences
df_diff = df1.compare(df2, keep_equal=True, align_axis=0)
#view results
print(df_diff)
team points
1 self B 22
other B 30
3 self D 14
other E 20
Nous pouvons voir que les DataFrames ont deux lignes différentes.
En particulier, nous pouvons voir que les lignes aux positions d’index 1 et 3 de chaque DataFrame ont des valeurs différentes dans au moins une colonne.
Les valeurs de la ligne self affichent les valeurs du premier DataFrame tandis que les valeurs de l’ autre ligne affichent les valeurs du deuxième DataFrame.
Par exemple, on peut voir :
- La ligne en position d’index 1 du premier DataFrame contient B dans la colonne équipe et 22 dans la colonne points.
- La ligne en position d’index 1 du deuxième DataFrame contient B dans la colonne équipe et 30 dans la colonne points.
Remarque : L’argument keep_equal=True indique aux pandas de conserver des valeurs égales. Sinon, les valeurs égales sont affichées sous forme de NaN.
Exemple 2 : comparer les DataFrames et conserver toutes les lignes
Le code suivant montre comment utiliser l’argument keep_shape=True pour comparer les deux DataFrames ligne par ligne et conserver toutes les lignes des DataFrames d’origine :
#compare DataFrames and keep all rows
df_diff = df1.compare(df2, keep_equal=True, keep_shape=True, align_axis=0)
#view results
print(df_diff)
team points assists
0 self A 18 5
other A 18 5
1 self B 22 7
other B 30 7
2 self C 19 7
other C 19 7
3 self D 14 9
other E 20 9
Le DataFrame résultant contient toutes les lignes et colonnes des DataFrames d’origine.
Remarque n°1 : La fonction compare() suppose que les deux DataFrames ont les mêmes dimensions.
Remarque n°2 : Vous pouvez trouver la documentation complète de la fonction pandas compare() ici .
Ressources additionnelles
Les didacticiels suivants expliquent comment effectuer d’autres tâches courantes dans les pandas :
Pandas : comment comparer deux colonnes
Pandas : comment comparer trois colonnes
Pandas : comment comparer des colonnes dans deux DataFrames différents