Pandas Verarbeitung doppelter Daten
Doppelte Daten sind ein häufiges Problem in der Datenanalyse, das die Genauigkeit statistischer Ergebnisse beeinträchtigen kann. Pandas bietet umfassende Funktionen zum Erkennen und Behandeln doppelter Daten.
Erkennen doppelter Daten
duplicated-Methode
Beispiel
# Erstelle ein DataFrame, das doppelte Zeilen enthält
df = pd.DataFrame({
"Name": ["Zhang San", "Li Si", "Wang Wu", "Zhang San", "Li Si", "Zhao Liu"],
"Alter": [25, 30, 28, 25, 30, 35],
"City": ["Beijing", "Shanghai", "Guangzhou", "Beijing", "Shenzhen", "Beijing"]
})
print("Originaldaten:")
print(df)
print()
# Doppelte Zeilen erkennen (standardmäßig werden ab dem ersten Vorkommen markiert, keep='first')
print("Doppelte Zeilen erkannt:")
print(df.duplicated())
print()
# Anzahl der doppelten Zeilen zählen
print(f"Anzahl der doppelten Zeilen: {df.duplicated().sum()}")
print()
# Duplikate in einer bestimmten Spalte erkennen
print("Duplikate anhand der Spalte 'Name' erkennen:")
print(df.duplicated(subset=["Name"]))
keep-Parameter
Beispiel
df = pd.DataFrame({
"Name": ["Zhang San", "Li Si", "Zhang San", "Wang Wu", "Li Si"],
"Alter": [25, 30, 25, 28, 30]
})
print("Originaldaten:")
print(df)
print()
# keep='first': das erste Vorkommen behalten (Standard)
print("keep='first' (Standard):")
print(df.duplicated(keep="first"))
print()
# keep='last': das letzte Vorkommen behalten
print("keep='last':")
print(df.duplicated(keep="last"))
print()
# keep=False: alle Duplikate markieren (keine behalten)
print("keep=False (alle Duplikate markieren):")
print(df.duplicated(keep=False))
Duplikate entfernen
Grundlegende Verwendung von drop_duplicates
Beispiel
df = pd.DataFrame({
"Name": ["Zhang San", "Li Si", "Zhang San", "Wang Wu", "Li Si"],
"Alter": [25, 30, 25, 28, 30],
"City": ["Beijing", "Shanghai", "Beijing", "Guangzhou", "Shenzhen"]
})
print("Originaldaten:")
print(df)
print()
# Doppelte Zeilen entfernen (standardmäßig die erste behalten)
print("Doppelte Zeilen entfernen (die erste behalten):")
print(df.drop_duplicates())
print()
# Die letzte behalten
print("Doppelte Zeilen entfernen (die letzte behalten):")
print(df.drop_duplicates(keep="last"))
print()
# Keine doppelten Zeilen behalten
print("Alle doppelten Zeilen entfernen:")
print(df.drop_duplicates(keep=False))
Duplikate nach Spalte entfernen
Beispiel
df = pd.DataFrame({
"Name": ["Zhang San", "Li Si", "Zhang San", "Wang Wu"],
"Alter": [25, 30, 35, 28],
"City": ["Beijing", "Shanghai", "Beijing", "Guangzhou"]
})
print("Originaldaten:")
print(df)
print()
# Duplikate nach einer einzelnen Spalte entfernen
print("Duplikate nach der Spalte 'Name' entfernen:")
print(df.drop_duplicates(subset=["Name"]))
print()
# Duplikate anhand einer Kombination mehrerer Spalten entfernen
print("Duplikate anhand der Kombination 'Name'+'City' entfernen:")
print(df.drop_duplicates(subset=["Name", "City"]))
print()
# Die Zeile mit dem maximalen Wert in einer bestimmten Spalte behalten
print("Nach 'Name' gruppieren, den Eintrag mit dem höchsten Alter behalten:")
print(df.sort_values("Age", ascending=False).drop_duplicates(subset=["Name"], keep="first"))
Praktisch: Datenbereinigung
Umfassendes Fallbeispiel
Beispiel
import numpy as np
# Simulierte Bestelldaten erstellen (mit Duplikaten)
orders = pd.DataFrame({
"Order ID": ["O001", "O002", "O001", "O003", "O002", "O004"],
"Customer ID": ["C001", "C002", "C001", "C003", "C002", "C004"],
"Product": ["iPhone", "MacBook", "iPhone", "iPad", "AirPods", "Apple Watch"],
"Amount": [8000, 12000, 8000, 5000, 1500, 3000],
"Date": ["2024-01-01", "2024-01-02", "2024-01-01", "2024-01-03", "2024-01-02", "2024-01-04"]
})
print("Ursprüngliche Bestelldaten:")
print(orders)
print()
# 1. Doppelte Bestellungen erkennen
print("Erkennung doppelter Bestellungen:")
duplicates = orders[orders.duplicated(subset=["Order ID"], keep=False)]
print(duplicates)
print()
# 2. Vollständig doppelte Bestellungen entfernen
orders_clean = orders.drop_duplicates()
print("Nach dem Entfernen vollständiger Duplikate:")
print(f"Original {len(orders)} Zeilen -> {len(orders_clean)} Zeilen")
print()
# 3. Duplikate nach Bestell-ID entfernen, die neueste behalten
# Angenommen, der letzte Datensatz ist der neueste
orders_clean = orders.sort_values("Date").drop_duplicates(
subset=["Order ID"],
keep="last"
).sort_index()
print("Duplikate nach Bestell-ID entfernen (die neueste behalten):")
print(orders_clean)
Erweiterte Nutzung
Bestimmte Zeilen nach Gruppe behalten
Beispiel
df = pd.DataFrame({
"Customer": ["A", "A", "A", "B", "B", "B"],
"Monat": ["01", "02", "03", "01", "02", "03"],
"Spending": [100, 200, 150, 300, 250, 280]
})
print("Originaldaten:")
print(df)
print()
# Behalte den Monat mit den höchsten Ausgaben für jeden Kunden
print("Der Monat mit den höchsten Ausgaben für jeden Kunden:")
result = df.sort_values("Spending", ascending=False).drop_duplicates(
subset=["Customer"],
keep="first"
).sort_values("Customer")
print(result)
print()
# Behalte den ersten Datensatz für jeden Kunden (nach Monat)
print("Der erste Datensatz für jeden Kunden:")
result = df.sort_values("Month").drop_duplicates(
subset=["Customer"],
keep="first"
)
print(result)
Duplikate markieren statt entfernen
Beispiel
df = pd.DataFrame({
"Name": ["Zhang San", "Li Si", "Zhang San", "Wang Wu", "Li Si"],
"City": ["Beijing", "Shanghai", "Beijing", "Guangzhou", "Shenzhen"]
})
# Duplikat-Flag-Spalte hinzufügen
df["Is Duplicate"] = df.duplicated(subset=["Name"], keep=False)
print("Duplikatzeilen markieren:")
print(df)
print()
# Oder mit groupby markieren
df["Duplicate Count"] = df.groupby("Name")["Name"].transform("count")
df["Is First"] = ~df.duplicated(subset=["Name"], keep="first")
print("Duplikatanzahl pro Gruppe:")
print(df)
Hinweise
1. Unterscheiden Sie zwischen "vollständigen Duplikaten" und "partiellen Duplikaten"
Vollständige Duplikate bedeuten, dass alle Spaltenwerte gleich sind, während partielle Duplikate bedeuten, dass bestimmte Spalten gleich sind. Verwenden Sie diesubsetParameter zur Angabe der Spalten für die Duplikaterkennung.
2. Auswahl der Beibehaltungsstrategie
Wählen Sie je nach Geschäftsanforderungen, ob Sie den ersten, den letzten oder keinen behalten. Welchen Sie behalten, kann nachfolgende Analyseergebnisse beeinflussen.
3. Auswirkung des Datentyps
Bei der Erkennung von Duplikaten werden Datentypen berücksichtigt. Beispielsweise werden die Ganzzahl 1 und die Gleitkommazahl 1.0 als unterschiedlich behandelt.
Andere ErweiterungenBevor doppelte Daten entfernt werden, wird empfohlen, zunächst die Ursache und Verteilung der Duplikate zu analysieren, um sicherzustellen, dass der Entfernungsvorgang keine wichtigen Informationen verliert.