Comment comparer deux DataFrames dans Pandas
Souvent, vous pourriez être intéressé à comparer les valeurs entre deux DataFrames pandas pour repérer leurs similitudes et leurs différences.
Ce tutoriel explique comment procéder.
Exemple : comparaison de deux DataFrames dans Pandas
Supposons que nous ayons les deux DataFrames pandas suivants, qui contiennent chacun des données sur quatre joueurs de basket-ball :
import pandas as pd #define DataFrame 1 df1 = pd.DataFrame({'player': ['A', 'B', 'C', 'D'], 'points': [12, 15, 17, 24], 'assists': [4, 6, 7, 8]}) df1 player points assists 0 A 12 4 1 B 15 6 2 C 17 7 3 D 24 88 #define DataFrame 2 df2 = pd.DataFrame({'player': ['A', 'B', 'C', 'D'], 'points': [12, 24, 26, 29], 'assists': [7, 8, 10, 13]}) df2 player points assists 0 A 12 7 1 B 24 8 2 C 26 10 3 D 29 13
Exemple 1 : Découvrez si les deux DataFrames sont identiques.
On peut d’abord savoir si les deux DataFrames sont identiques en utilisant la fonction DataFrame.equals() :
#see if two DataFrames are identical df1.equals(df2) False
Les deux DataFrames ne contiennent pas exactement les mêmes valeurs, donc cette fonction renvoie correctement False .
Exemple 2 : Trouvez les différences de statistiques des joueurs entre les deux DataFrames.
Nous pouvons trouver les différences entre les passes décisives et les points de chaque joueur en utilisant la fonction pandas subtract() :
#subtract df1 from df2 df2.set_index('player').subtract(df1.set_index('player')) points assists player A 0 3 B 9 2 C 9 3 D 5 5
La façon d’interpréter cela est la suivante :
- Le joueur A avait le même nombre de points dans les deux DataFrames, mais il avait 3 passes décisives supplémentaires dans le DataFrame 2.
- Le joueur B avait 9 points de plus et 2 passes décisives de plus dans le DataFrame 2 par rapport au DataFrame 1.
- Le joueur C avait 9 points de plus et 3 passes décisives de plus dans DataFrame 2 par rapport au DataFrame 1.
- Le joueur D avait 5 points de plus et 5 passes décisives de plus dans DataFrame 2 par rapport au DataFrame 1.
Exemple 3 : recherchez toutes les lignes qui n’existent que dans un seul DataFrame.
Nous pouvons utiliser le code suivant pour obtenir une liste complète des lignes qui n’apparaissent que dans un seul DataFrame :
#outer merge the two DataFrames, adding an indicator column called 'Exist' diff_df = pd.merge(df1, df2, how='outer', indicator='Exist') #find which rows don't exist in both DataFrames diff_df = diff_df.loc[diff_df['Exist'] != 'both'] diff_df player points assists Exist 0 A 12 4 left_only 1 B 15 6 left_only 2 C 17 7 left_only 3 D 24 8 left_only 4 A 12 7 right_only 5 B 24 8 right_only 6 C 26 10 right_only 7 D 29 13 right_only
Dans ce cas, les deux DataFrames ne partagent pas de lignes identiques, il y a donc 8 lignes au total qui n’apparaissent que dans l’un des DataFrames.
La colonne intitulée « Exist » nous indique commodément dans quel DataFrame chaque ligne apparaît de manière unique.