Confronta Pandas DataFrame Object
Questo tutorial spiega come possiamo confrontare gli oggetti DataFrame di Pandas in Python. Possiamo confrontare i DataFrame usando l’operatore ==
.
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)
Produzione:
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
Useremo i DataFrame df_1
e df_2
per dimostrare il confronto di DataFrame in questo articolo.
Confronta l’oggetto DataFrame di Pandas usando l’operatore ==
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)
Produzione:
Player Goals
0 True False
1 True True
2 True True
3 True False
4 True True
Confronta gli elementi corrispondenti di df_1
ad df_2
e restituisce True
se gli elementi corrispondenti di quella posizione sono gli stessi, altrimenti restituisce False
.
Possiamo usare il metodo pandas.DataFrame.all()
per sapere quali righe sono uguali sia in df_1
che in 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))
Produzione:
0 False
1 True
2 True
3 False
4 True
dtype: bool
Le righe con il valore True
nell’output hanno lo stesso valore degli elementi corrispondenti. Quindi, le righe con il valore False
nell’output hanno valori diversi degli elementi corrispondenti.
Possiamo usare l’indicizzazione per elencare tutte le righe i cui valori differiscono in df_1
e 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])
Produzione:
Player Goals
0 Lewandowski 10
3 Messi 5
Elenca tutte le righe di df_1
, che hanno valori diversi dalle righe corrispondenti in df_2
.
Se abbiamo indici diversi per df_1
e df_2
, otteniamo un errore che dice 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)
Produzione:
Traceback (most recent call last):
...
ValueError: Can only compare identically-labeled DataFrame objects
Possiamo usare il metodo pandas.DataFrame.reset_index()
per reimpostare gli indici e superare il problema di cui sopra.
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)
Produzione:
Player Goals
0 True False
1 True True
2 True True
3 True False
4 True True
Reimposta l’indice di df_2
prima di confrontare df_1
e df_2
in modo che due DataFrame abbiano gli stessi indici per rendere possibile il confronto.
Dobbiamo anche assicurarci di avere lo stesso numero di righe in DataFrames prima di confrontarli.
Suraj Joshi is a backend software engineer at Matrice.ai.
LinkedInArticolo correlato - Pandas DataFrame
- Come ottenere le intestazioni delle colonne DataFrame Pandas come lista
- Come cancellare la colonna DataFrame Pandas DataFrame
- Come convertire la colonna DataFrame in data e ora in pandas
- Converti un Float in un Integer in Pandas DataFrame
- Ordina Pandas DataFrame in base ai valori di una colonna
- Ottieni l'aggregato di Pandas Group-By e Sum