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

Ajouter un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *