Pandas-DataFrame-Objekt vergleichen
Dieses Tutorial erklärt, wie wir Pandas DataFrame-Objekte in Python vergleichen können. Wir können DataFrames mit dem Operator ==
vergleichen.
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)
Ausgabe:
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
In diesem Artikel werden wir die DataFrames df_1
und df_2
verwenden, um den Vergleich von DataFrames zu demonstrieren.
Vergleich von Pandas DataFrame-Objekten mit dem ==
Operator
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)
Ausgabe:
Player Goals
0 True False
1 True True
2 True True
3 True False
4 True True
Er vergleicht die entsprechenden Elemente von df_1
und df_2
und gibt True
zurück, wenn die entsprechenden Elemente an dieser Position gleich sind, andernfalls gibt er False
zurück.
Wir können die Methode pandas.DataFrame.all()
verwenden, um zu erfahren, welche Zeilen in df_1
und df_2
gleich sind.
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))
Ausgabe:
0 False
1 True
2 True
3 False
4 True
dtype: bool
Die Zeilen mit dem Wert True
haben in der Ausgabe den gleichen Wert wie die entsprechenden Elemente. Die Zeilen mit dem Wert False
in der Ausgabe haben also unterschiedliche Werte der entsprechenden Elemente.
Wir können die Indizierung verwenden, um alle Zeilen aufzulisten, deren Werte sich in df_1
und df_2
unterscheiden.
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])
Ausgabe:
Player Goals
0 Lewandowski 10
3 Messi 5
Es werden alle Zeilen von df_1
aufgelistet, die andere Werte haben als die entsprechenden Zeilen in df_2
.
Wenn wir unterschiedliche Indizes für df_1
und df_2
haben, erhalten wir die Fehlermeldung ValueError: Kann nur identisch beschriftete DataFrame-Objekte vergleichen
.
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)
Ausgabe:
Traceback (most recent call last):
...
ValueError: Can only compare identically-labeled DataFrame objects
Wir können die Methode pandas.DataFrame.reset_index()
verwenden, um die Indizes zurückzusetzen, um das obige Problem zu beheben.
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)
Ausgabe:
Player Goals
0 True False
1 True True
2 True True
3 True False
4 True True
Vor dem Vergleich von df_1
und df_2
wird der Index von df_2
zurückgesetzt, damit die beiden DataFrames die gleichen Indizes haben, um den Vergleich zu ermöglichen.
Wir müssen auch sicherstellen, dass wir die gleiche Anzahl von Zeilen in DataFrames haben, bevor wir sie vergleichen.
Suraj Joshi is a backend software engineer at Matrice.ai.
LinkedInVerwandter Artikel - Pandas DataFrame
- Wie man Pandas DataFrame-Spaltenüberschriften als Liste erhält
- Pandas DataFrame-Spalte löschen
- Wie man DataFrame-Spalte in Datetime in Pandas konvertiert
- Wie konvertiert man eine Fließkommazahl in eine Ganzzahl in Pandas DataFrame
- Wie man Pandas-DataFrame nach den Werten einer Spalte sortiert
- Wie erhält man das Aggregat der Pandas gruppenweise und sum