Pandas df.drop_duplicates()-Funktion
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 (wenn
inplace=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 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:
- In den ursprünglichen Daten sind Zeile 0 und Zeile 2 exakt gleich (Zhang San, 25 Jahre alt, Technologieabteilung).
- Zeile 1 und Zeile 4 sind ebenfalls exakt gleich (Li Si, 30 Jahre alt, Marketingabteilung).
- Verwendung
drop_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 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 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 von
keep='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 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; da
keep=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 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 von
ignore_index, nach dem Löschen von Zeile 2 ist der Index 0, 1, 3, was nicht zusammenhängend ist. - Verwendung
ignore_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 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:
- Die ursprünglichen Daten haben 6 Zeilen, mit 2 doppelten Bestellungen (O001 und O002 kommen jeweils zweimal vor).
- Verwenden Sie
drop_duplicates(subset=['订单号'])Deduplizieren anhand der Bestellnummer. - 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 Sie
subsetBei Verwendung des Parameters werden Duplikate nur anhand der angegebenen Spalten ermittelt; Werte in anderen Spalten beeinflussen die Ermittlung nicht. - Verwenden Sie
keep=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.
Andere Erweiterungen