Pandas-DataFrame-Objekt vergleichen

Suraj Joshi 17 Februar 2021
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 avatar Suraj Joshi avatar

Suraj Joshi is a backend software engineer at Matrice.ai.

LinkedIn

Verwandter Artikel - Pandas DataFrame