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.

Ajouter un commentaire

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