Comparer l'objet Pandas DataFrame
Ce tutoriel explique comment comparer des objets Pandas DataFrame en Python. Nous pouvons comparer des DataFrames en utilisant l’opérateur ==
.
import pandas as pd
data_season1 = {
"Player": ["Lewandowski", "Haland", "Ronaldo", "Messi", "Mbappe"],
"Goals": [10, 8, 6, 5, 4],
}
data_season2 = {
"Player": ["Lewandowski", "Haland", "Ronaldo", "Messi", "Mbappe"],
"Goals": [7, 8, 6, 7, 4],
}
df_1 = pd.DataFrame(data_season1)
df_2 = pd.DataFrame(data_season2)
print("df_1:")
print(df_1)
print("")
print("df_2:")
print(df_2)
Production :
df_1:
Player Goals
0 Lewandowski 10
1 Haland 8
2 Ronaldo 6
3 Messi 5
4 Mbappe 4
df_2:
Player Goals
0 Lewandowski 7
1 Haland 8
2 Ronaldo 6
3 Messi 7
4 Mbappe 4
Nous utiliserons les DataFrames df_1
et df_2
pour démontrer la comparaison des DataFrames dans cet article.
Comparer l’objet Pandas DataFrame en utilisant l’opérateur ==
import pandas as pd
data_season1 = {
"Player": ["Lewandowski", "Haland", "Ronaldo", "Messi", "Mbappe"],
"Goals": [10, 8, 6, 5, 4],
}
data_season2 = {
"Player": ["Lewandowski", "Haland", "Ronaldo", "Messi", "Mbappe"],
"Goals": [7, 8, 6, 7, 4],
}
df_1 = pd.DataFrame(data_season1)
df_2 = pd.DataFrame(data_season2)
print(df_1 == df_2)
Production :
Player Goals
0 True False
1 True True
2 True True
3 True False
4 True True
Il compare les éléments correspondants de df_1
et df_2
et retourne True
si les éléments correspondants de cette position sont les mêmes, sinon il retourne False
.
Nous pouvons utiliser la méthode pandas.DataFrame.all()
pour savoir quelles lignes sont identiques dans df_1
et df_2
.
import pandas as pd
data_season1 = {
"Player": ["Lewandowski", "Haland", "Ronaldo", "Messi", "Mbappe"],
"Goals": [10, 8, 6, 5, 4],
}
data_season2 = {
"Player": ["Lewandowski", "Haland", "Ronaldo", "Messi", "Mbappe"],
"Goals": [7, 8, 6, 7, 4],
}
df_1 = pd.DataFrame(data_season1)
df_2 = pd.DataFrame(data_season2)
print((df_1 == df_2).all(axis=1))
Production :
0 False
1 True
2 True
3 False
4 True
dtype: bool
Les lignes avec la valeur True
dans la sortie ont la même valeur que les éléments correspondants. Par conséquent, les lignes avec une valeur False
dans la sortie ont des valeurs différentes des éléments correspondants.
Nous pouvons utiliser l’indexation pour lister toutes les lignes dont les valeurs diffèrent dans df_1
et df_2
.
import pandas as pd
data_season1 = {
"Player": ["Lewandowski", "Haland", "Ronaldo", "Messi", "Mbappe"],
"Goals": [10, 8, 6, 5, 4],
}
data_season2 = {
"Player": ["Lewandowski", "Haland", "Ronaldo", "Messi", "Mbappe"],
"Goals": [7, 8, 6, 7, 4],
}
df_1 = pd.DataFrame(data_season1)
df_2 = pd.DataFrame(data_season2)
print(df_1[(df_1 == df_2).all(axis=1) == False])
Production :
Player Goals
0 Lewandowski 10
3 Messi 5
Il liste toutes les lignes de df_1
, qui ont des valeurs différentes des lignes correspondantes dans df_2
.
Si nous avons des index différents pour df_1
et df_2
, nous obtenons une erreur disant ValueError: Can only compare identically-labeled DataFrame objects
.
import pandas as pd
data_season1 = {
"Player": ["Lewandowski", "Haland", "Ronaldo", "Messi", "Mbappe"],
"Goals": [10, 8, 6, 5, 4],
}
data_season2 = {
"Player": ["Lewandowski", "Haland", "Ronaldo", "Messi", "Mbappe"],
"Goals": [7, 8, 6, 7, 4],
}
df_1 = pd.DataFrame(data_season1)
df_2 = pd.DataFrame(data_season2, index=["a", "b", "c", "d", "e"])
print(df_1 == df_2)
Production :
Traceback (most recent call last):
...
ValueError: Can only compare identically-labeled DataFrame objects
Nous pouvons utiliser la méthode pandas.DataFrame.reset_index()
pour réinitialiser les index afin de résoudre le problème ci-dessus.
import pandas as pd
data_season1 = {
"Player": ["Lewandowski", "Haland", "Ronaldo", "Messi", "Mbappe"],
"Goals": [10, 8, 6, 5, 4],
}
data_season2 = {
"Player": ["Lewandowski", "Haland", "Ronaldo", "Messi", "Mbappe"],
"Goals": [7, 8, 6, 7, 4],
}
df_1 = pd.DataFrame(data_season1)
df_2 = pd.DataFrame(data_season2, index=["a", "b", "c", "d", "e"])
df_2.reset_index(drop=True, inplace=True)
print(df_1 == df_2)
Production :
Player Goals
0 True False
1 True True
2 True True
3 True False
4 True True
Elle réinitialise l’index de df_2
avant de comparer df_1
et df_2
afin que deux dataframes aient les mêmes index pour rendre la comparaison possible.
Nous devons également nous assurer que nous avons le même nombre de lignes dans DataFrames avant de les comparer.
Suraj Joshi is a backend software engineer at Matrice.ai.
LinkedInArticle connexe - Pandas DataFrame
- Comment obtenir les en-têtes de colonne de Pandas DataFrame sous forme de liste
- Comment supprimer une colonne de Pandas DataFrame
- Comment convertir la colonne DataFrame en date-heure dans Pandas
- Comment convertir un float en un entier dans Pandas DataFrame
- Comment trier le DataFrame de Pandas par les valeurs d'une colonne
- Comment obtenir l'agrégat des Pandas par groupe et par somme