Pandas löschen doppelte Zeilen

Suraj Joshi 30 Januar 2023
  1. DataFrame.drop_duplicates() Syntax
  2. Entfernen doppelter Zeilen mit der Methode DataFrame.drop_duplicates()
  3. Setzen Sie keep='last' in der drop_duplicates() Methode
Pandas löschen doppelte Zeilen

Dieses Tutorial erklärt, wie wir alle doppelten Zeilen aus einem Pandas DataFrame mit der Methode DataFrame.drop_duplicates() entfernen können.

DataFrame.drop_duplicates() Syntax

DataFrame.drop_duplicates(subset=None, keep="first", inplace=False, ignore_index=False)

Die Methode gibt einen DataFrame zurück und entfernt alle wiederholten Zeilen im DataFrame.

Entfernen doppelter Zeilen mit der Methode DataFrame.drop_duplicates()

import pandas as pd

df_with_duplicates = pd.DataFrame(
    {
        "Id": [302, 504, 708, 103, 303, 302],
        "Name": ["Watch", "Camera", "Phone", "Shoes", "Watch", "Watch"],
        "Cost": ["300", "400", "350", "100", "300", "300"],
    }
)

df_without_duplicates = df_with_duplicates.drop_duplicates()

print("DataFrame with duplicates:")
print(df_with_duplicates, "\n")

print("DataFrame without duplicates:")
print(df_without_duplicates, "\n")

Ausgabe:

DataFrame with duplicates:
    Id    Name Cost
0  302   Watch  300
1  504  Camera  400
2  708   Phone  350
3  103   Shoes  100
4  303   Watch  300
5  302   Watch  300 

DataFrame without duplicates:
    Id    Name Cost
0  302   Watch  300
1  504  Camera  400
2  708   Phone  350
3  103   Shoes  100
4  303   Watch  300 

Es werden die Zeilen entfernt, die für alle Spalten die gleichen Werte haben. Standardmäßig werden nur die Zeilen, die für jede Spalte im DataFrame die gleichen Werte haben, als Duplikate betrachtet. Im DataFrame df_with_duplicates haben die erste und die fünfte Zeile für alle Spalten die gleichen Werte, so dass die fünfte Zeile entfernt wird.

Parameter subset setzen, um Duplikate nur auf Basis bestimmter Spalten zu entfernen

import pandas as pd

df_with_duplicates = pd.DataFrame(
    {
        "Id": [302, 504, 708, 103, 303, 302],
        "Name": ["Watch", "Camera", "Phone", "Shoes", "Watch", "Watch"],
        "Cost": ["300", "400", "350", "100", "300", "300"],
    }
)

df_without_duplicates = df_with_duplicates.drop_duplicates(subset=["Name"])

print("DataFrame with duplicates:")
print(df_with_duplicates, "\n")

print("DataFrame without duplicates:")
print(df_without_duplicates, "\n")

Ausgabe:

DataFrame with duplicates:
    Id    Name Cost
0  302   Watch  300
1  504  Camera  400
2  708   Phone  350
3  103   Shoes  100
4  303   Watch  300
5  302   Watch  300 

DataFrame without duplicates:
    Id    Name Cost
0  302   Watch  300
1  504  Camera  400
2  708   Phone  350
3  103   Shoes  100 

Hier übergeben wir Name als subset-Argument an die Methode drop_duplicates(). Die vierte und fünfte Zeile werden entfernt, da sie den gleichen Wert der Spalte Name haben wie die erste Spalte.

Setzen Sie keep='last' in der drop_duplicates() Methode

import pandas as pd

df_with_duplicates = pd.DataFrame(
    {
        "Id": [302, 504, 708, 103, 303, 302],
        "Name": ["Watch", "Camera", "Phone", "Shoes", "Watch", "Watch"],
        "Cost": ["300", "400", "350", "100", "300", "300"],
    }
)

df_without_duplicates = df_with_duplicates.drop_duplicates(subset=["Name"], keep="last")

print("DataFrame with duplicates:")
print(df_with_duplicates, "\n")

print("DataFrame without duplicates:")
print(df_without_duplicates, "\n")

Ausgabe:

DataFrame with duplicates:
    Id    Name Cost
0  302   Watch  300
1  504  Camera  400
2  708   Phone  350
3  103   Shoes  100
4  303   Watch  300
5  302   Watch  300 

DataFrame without duplicates:
    Id    Name Cost
1  504  Camera  400
2  708   Phone  350
3  103   Shoes  100
5  302   Watch  300 

Es werden alle Zeilen entfernt, bis auf die letzte Zeile, die den gleichen Wert der Spalte Name hat.

Wir setzen keep=False, um alle Zeilen zu entfernen, die den gleichen Wert einer beliebigen Spalte haben.

import pandas as pd

df_with_duplicates = pd.DataFrame(
    {
        "Id": [302, 504, 708, 103, 303, 302],
        "Name": ["Watch", "Camera", "Phone", "Shoes", "Watch", "Watch"],
        "Cost": ["300", "400", "350", "100", "300", "300"],
    }
)

df_without_duplicates = df_with_duplicates.drop_duplicates(subset=["Name"], keep=False)

print("DataFrame with duplicates:")
print(df_with_duplicates, "\n")

print("DataFrame without duplicates:")
print(df_without_duplicates, "\n")

Ausgabe:

DataFrame with duplicates:
    Id    Name Cost
0  302   Watch  300
1  504  Camera  400
2  708   Phone  350
3  103   Shoes  100
4  303   Watch  300
5  302   Watch  300 

DataFrame without duplicates:
    Id    Name Cost
1  504  Camera  400
2  708   Phone  350
3  103   Shoes  100 

Es werden die erste, fünfte und sechste Zeile entfernt, da sie alle den gleichen Wert für die Spalte Name haben.

Suraj Joshi avatar Suraj Joshi avatar

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

LinkedIn

Verwandter Artikel - Pandas DataFrame Row