Pandas df.drop_duplicates()-Funktion

Gängige Pandas-Funktionen


df.drop_duplicates()Es ist eine Funktion in Pandas, mit der doppelte Zeilen entfernt werden.

Bei der Datenerfassung und -integration sind doppelte Daten ein häufiges Problem.drop_duplicates()Sie kann Ihnen helfen, doppelte Zeilen anhand angegebener Spalten oder aller Spalten zu identifizieren und zu entfernen, wobei das erste oder letzte Vorkommen beibehalten wird. Dies ist sehr nützlich für die Deduplizierung von Daten und die Sicherstellung der Eindeutigkeit der Daten.


Grundlegende Syntax und Parameter

drop_duplicates()Es ist eine Member-Funktion von DataFrame, die über den Punktoperator aufgerufen wird.zum Aufrufen.

Syntaxformat

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

Parameterbeschreibung

Parameter Type Erforderlich Beschreibung Standardwert
Teilmenge Spaltenlabel oder Liste Optional Geben Sie die Spalte(n) an, die zum Bestimmen von Duplikaten verwendet werden. Wenn esNone, werden alle Spalten verwendet. Es kann ein einzelner Spaltenname oder eine Liste von Spaltennamen sein. Keine
keep str oder False Optional Geben Sie an, welcher doppelte Datensatz beibehalten werden soll.'first'Den ersten behalten;'last'Den letzten behalten;FalseAlle doppelten Datensätze entfernen. 'first'
inplace bool Optional Wenn esTrue, das ursprüngliche DataFrame direkt ändern und kein neues Objekt zurückgeben; wenn esFalse, ein neues DataFrame zurückgeben, und die ursprünglichen Daten bleiben unverändert. False
ignore_index bool Optional Wenn esTrue, den Index des Ergebnisses zurücksetzen, beginnend bei 0; wenn esFalse, den ursprünglichen Index beibehalten. False

Beschreibung des Rückgabewerts

  • Gibt ein neues DataFrame zurück (wenninplace=False), oderNone(wenninplace=True)。
  • Das zurückgegebene DataFrame enthält keine doppelten Zeilen.

Beispiele

Lassen Sie uns anhand einer Reihe von Beispielen gründlichdrop_duplicates()die Verwendung beherrschen.

Beispiel 1: Vollständig duplizierte Zeilen entfernen

Standardmäßig werden alle Spalten verwendet, um zu bestimmen, ob eine Zeile ein Duplikat ist.

Beispiel

import pandas as pd
import numpy as np

# Erstelle ein DataFrame, das doppelte Zeilen enthält
data = {
    'Name': ['Zhang San', 'Li Si', 'Zhang San', 'Wang Wu', 'Li Si'],
    'Age': [25, 30, 25, 35, 30],
    'Department': ['Technology', 'Marketing', 'Technology', 'Technology', 'Marketing']
}
df = pd.DataFrame(data)

print(Originaldaten:)
print(df)
print("=" * 50)

# Entferne doppelte Zeilen, behalte das erste Vorkommen
df_cleaned = df.drop_duplicates()

print(Daten nach dem Entfernen doppelter Zeilen:)
print(df_cleaned)

Erwartete Ausgabe:

原始数据:
    姓名  年龄  部门
0  张三   25  技术
1  李四   30  市场
2  张三   25  技术
3  王五   35  技术
4  李四   30  市场
==================================================
删除重复行后的数据:
    0  姓名  年龄  部门
0  张三   25  技术
1  李四   30  市场
3  王五   35  技术

Code-Erklärung:

  1. In den ursprünglichen Daten sind Zeile 0 und Zeile 2 exakt gleich (Zhang San, 25 Jahre alt, Technologieabteilung).
  2. Zeile 1 und Zeile 4 sind ebenfalls exakt gleich (Li Si, 30 Jahre alt, Marketingabteilung).
  3. Verwendungdrop_duplicates()Mit Standardparametern werden doppelte Zeilen entfernt und das erste Vorkommen wird beibehalten.

Beispiel 2: Doppelte Zeilen basierend auf angegebenen Spalten entfernen

Sie könnensubsetParameter, um Duplikate nur anhand bestimmter Spalten zu bestimmen.

Beispiel

import pandas as pd
import numpy as np

# DataFrame erstellen
data = {
    'Name': ['Zhang San', 'Li Si', 'Zhang San', 'Wang Wu'],
    'Age': [25, 30, 28, 35],  # Zhang San erscheint zweimal, aber mit unterschiedlichen Alterswerten
    'Department': ['Technology', 'Marketing', 'Technology', 'Marketing']
}
df = pd.DataFrame(data)

print(Originaldaten:)
print(df)
print("=" * 50)

# Duplikate nur anhand der Spalte "Name" bestimmen
df_cleaned = df.drop_duplicates(subset=['Name'])

print(Daten nach dem Entfernen von Duplikaten basierend auf der Spalte Name:)
print(df_cleaned)
print("=" * 50)

# Duplikate anhand der Spalten "Name" und "Department" bestimmen
df_cleaned2 = df.drop_duplicates(subset=['Name', 'Department'])

print(Daten nach Duplikaten basierend auf den Spalten Name und Department:)
print(df_cleaned2)

Erwartete Ausgabe:

原始数据:
    姓名  年龄  部门
0  张三   25  技术
1  李四   30  市场
2  张三   28  技术  # 虽然姓名重复,但年龄不同
3  王五   35  市场
==================================================
根据姓名列删除重复后的数据:
    姓名  年龄  部门
0  张三   25  技术  # 保留第一条张三的记录
2  张三   28  技术
3  王五   35  市场
==================================================
根据姓名和部门列删除重复后的数据:
     参数
姓名  年龄  部门
0  张三   25  技术
1  李四   30  市场
3  王五   35  市场

Code-Erklärung:

  • Bei der Bestimmung von Duplikaten basierend auf der Spalte Name haben die Zeilen 0 und 2 beide den Namen "Zhang San" und gelten als doppelte Zeilen, daher wird nur Zeile 0 behalten.
  • Bei der Bestimmung von Duplikaten basierend auf beiden Spalten Name und Department haben die Zeilen 0 und 2 dieselben Werte in Name und Department, daher wird Zeile 0 behalten.

Beispiel 3: Letzten doppelten Datensatz behalten

Verwendungkeep='last'Parameter behält den zuletzt auftretenden doppelten Datensatz.

Beispiel

import pandas as pd
import numpy as np

# Erstelle ein DataFrame, das doppelte Zeilen enthält
data = {
    'Student ID': ['S001', 'S002', 'S001', 'S003', 'S002'],
    'Name': ['Zhang San', 'Li Si', 'Zhang San', 'Wang Wu', 'Li Si'],
    'Score': [85, 90, 88, 92, 85]  # Dieselbe Student ID kann unterschiedliche Scores haben
}
df = pd.DataFrame(data)

print(Originaldaten:)
print(df)
print("=" * 50)

# Ersten Datensatz behalten (Standard)
df_first = df.drop_duplicates(subset=['Student ID'], keep='first')

print(Behalten des ersten doppelten Datensatzes:)
print(df_first)
print("=" * 50)

# Letzten Datensatz behalten
df_last = df.drop_duplicates(subset=['Student ID'], keep='last')

print(Behalten des letzten doppelten Datensatzes:)
print(df_last)

Erwartete Ausgabe:

原始数据:
    学号  姓名  成绩
0  S001  张三     85
1  S002  李四     90
2  S001  张三     88  # 同一个人,成绩不同
3  S王五   92
4  S002  李四     85  # 同一个人,成绩不同
==================================================
保留第一条重复记录:
    学号  姓名  成绩
0  S001 张三     85  # 保留第一个85分
1  S002  李四     90  # 保留第一个90分
3  王五   92
==================================================
保留最后一条重复记录:
    学号  姓名  成绩
2  S001  张三     88  # 保留最后一个88分
3  王五   92
4  S002  李四     85  # 保留最后一个85分

Code-Erklärung:

  • Student ID S001 hat zwei Datensätze mit den Punktzahlen 85 und 88; bei Verwendung vonkeep='first'behält denjenigen mit Punktzahl 85,keep='last'behält denjenigen mit Punktzahl 88.
  • Student ID S002 hat ebenfalls zwei Datensätze, mit den Punktzahlen 90 und 85.
  • Wählen Sie je nach Geschäftsanforderungen, ob der erste oder letzte Datensatz behalten werden soll.
  • Beispiel 4: Alle doppelten Datensätze entfernen

    Verwendungkeep=Falseentfernt alle doppelten Datensätze und behält nur Zeilen, die vollständig eindeutig sind.

    Beispiel

    import pandas as pd
    import numpy as np

    # DataFrame erstellen
    data = {
        'A': [1, 1, 2, 2, 3],
        'B': [1, 1, 2, 2, 3],
        'C': [1, 2, 3, 3, 5]
    }
    df = pd.DataFrame(data)

    print(Originaldaten:)
    print(df)
    print("=" * 50)

    # Alle doppelten Zeilen entfernen (keine Duplikate behalten)
    df_cleaned = df.drop_duplicates(keep=False)

    print(Daten nach dem Entfernen aller doppelten Zeilen:)
    print(df_cleaned)

    Erwartete Ausgabe:

    原始数据:
       A  B  C
    0  1  1  1
    1  1  1  2  # 与第0行A和B相同,是重复行
    2  2  2  3
    3  2  2  3  # 与第2行完全相同,是重复行
    4  3  3  5
    ==================================================
    删除所有重复行后的数据:
       A  B  C
    4  3  3  5
    

    Code-Erklärung:

    • Die Zeilen 0 und 1 haben dieselben Werte in den Spalten A und B, wodurch sie zu doppelten Zeilen werden; dakeep=Falsebeide gelöscht werden.
    • Die Zeilen 2 und 3 sind ebenfalls vollständig dupliziert und werden beide gelöscht.
    • Nur Zeile 4 ist vollständig eindeutig und wird beibehalten.

    Beispiel 5: Index zurücksetzen

    Nach dem Entfernen doppelter Zeilen kann der ursprüngliche Index nicht zusammenhängend werden; du kannstignore_index=Trueverwenden, um den Index zurückzusetzen.

    Beispiel

    import pandas as pd
    import numpy as np

    # Erstelle ein DataFrame, das doppelte Zeilen enthält
    data = {
        'Name': ['Zhang San', 'Li Si', 'Zhang San', 'Wang Wu'],
        'City': ['Beijing', 'Shanghai', 'Beijing', 'Guangzhou']
    }
    df = pd.DataFrame(data)

    print(Originaldaten:)
    print(df)
    print("=" * 50)

    # Doppelte Zeilen entfernen, ohne den Index zurückzusetzen
    df_cleaned1 = df.drop_duplicates()

    print(Doppelte Zeilen entfernen (ursprünglichen Index beibehalten):)
    print(df_cleaned1)
    print("=" * 50)

    # Doppelte Zeilen entfernen und den Index zurücksetzen
    df_cleaned2 = df.drop_duplicates(ignore_index=True)

    print(Doppelte Zeilen entfernen (Index zurücksetzen):)
    print(df_cleaned2)

    Erwartete Ausgabe:

    原始数据:
        姓名  城市
    0  张三  北京
    1  李四  上海
    2  张三  北京
    3  王五  广州
    ==================================================
    删除重复行(保留原始索引):
        姓名  城市
    0  张三  北京
    1  李四  上海
    3  王五  广州
    ==================================================
    删除重复行(重置索引):
        姓名  城市
    0  张三  北京
    1  李四  上海
    2  王五  广州
    

    Code-Erklärung:

    • Ohne Verwendung vonignore_index, nach dem Löschen von Zeile 2 ist der Index 0, 1, 3, was nicht zusammenhängend ist.
    • Verwendungignore_index=True, der Index beginnt wieder bei 0, was 0, 1, 2 ergibt.

    Beispiel 6: Kombination mit anderen Operationen

    drop_duplicates()Es kann in Kombination mit anderen DataFrame-Operationen verwendet werden.

    Beispiel

    import pandas as pd
    import numpy as np

    # Daten simulieren, die aus einer Datenbankabfrage abgerufen wurden
    data = {
        'Bestell-ID': ['O001', 'O002', 'O001', 'O003', 'O002', 'O004'],
        'Kundenname': ['Zhang San', 'Li Si', 'Zhang San', 'Wang Wu', 'Li Si', 'Zhao Liu'],
        'Betrag': [100, 200, 100, 300, 200, 400],
        'Datum': ['2024-01-01', '2024-01-02', '2024-01-01', '2024-01-03', '2024-01-02', '2024-01-04']
    }
    df = pd.DataFrame(data)

    print("Ursprüngliche Bestelldaten:")
    print(df)
    print("=" * 50)

    # Prüfen, wie viele doppelte Bestellungen vorhanden sind
    print(f"Gesamtzeilen: {len(df)}")
    print(f"Zeilen nach Deduplizierung: {len(df.drop_duplicates())}")
    print(f"Doppelte Zeilen: {len(df) - len(df.drop_duplicates())}")
    print("=" * 50)

    # Tatsächlich deduplizieren, den ersten Datensatz behalten und nur die benötigten Spalten behalten
    df_unique = df.drop_duplicates(subset=['Order ID'])[['Order ID', 'Customer Name', 'Amount']]

    print("Deduplizierte Bestelldaten:")
    print(df_unique)

    Erwartete Ausgabe:

    原始订单数据:
        订单号  客户名  金额   日期
    0  O001    张三  100  2024-01-01
    1  O002    李四  200  2024-01-02
    2  O001    张三  100  2024-01-01  # 重复订单
    3  O003    王五  300  2024-01-03
    4  O002    李四  200  2024-01-02  # 重复订单
    5  O004    赵六  400  2024-01-04
    ================================================++
    总行数: 6
    去重后行数: 4
    重复行数: 2
    

    Code-Erklärung:

    1. Die ursprünglichen Daten haben 6 Zeilen, mit 2 doppelten Bestellungen (O001 und O002 kommen jeweils zweimal vor).
    2. Verwenden Siedrop_duplicates(subset=['订单号'])Deduplizieren anhand der Bestellnummer.
    3. Kombiniert mit der Spaltenauswahl[['Order Number', 'Customer Name', 'Amount']], nur die benötigten Spalten behalten.

    Vorsichtsmaßnahmen

    • drop_duplicates()Standardmäßig wird das ursprüngliche DataFrame nicht verändert; wenn Sie es direkt ändern möchten, verwenden Sieinplace=TrueParameter überschrieben werden.
    • Verwenden SiesubsetBei Verwendung des Parameters werden Duplikate nur anhand der angegebenen Spalten ermittelt; Werte in anderen Spalten beeinflussen die Ermittlung nicht.
    • Verwenden Siekeep=Falselöscht alle doppelten Zeilen, was zu einem großen Datenverlust führen kann; mit Vorsicht verwenden.
    • Bevor Sie doppelte Daten löschen, wird empfohlen, zunächst die Ursache für Duplikate zu analysieren, um sicherzustellen, dass der Löschvorgang der Geschäftslogik entspricht.
    • Wenn in den Daten fehlende Werte (NaN) vorhanden sind, werden sie beim Vergleich standardmäßig als derselbe Wert behandelt.

    Gängige Pandas-Funktionen

    Andere Erweiterungen