Kurs
Duplikate zu entfernen ist entscheidend, um korrekte Anzahlen zu erhalten – oft willst du dasselbe Element nicht mehrfach zählen. In Python gelingt das mit dem Modul pandas, das eine Methode namens drop_duplicates bereitstellt.
Schauen wir uns anhand einiger Beispiele an, wie das funktioniert.
Doppelte Namen entfernen
Angenommen, du hast ein DataFrame mit Tierarztbesuchen und die Praxis möchte wissen, wie viele Hunde jeder Rasse die Praxis besucht haben. In deinem Datensatz gibt es aber Hunde wie Max und Stella, die mehrmals beim Tierarzt waren. Du kannst also nicht einfach die Anzahl der Rassen in der Spalte "breed" zählen.
print(vet_visits)
date name breed weight_kg
0 2018-09-02 Bella Labrador 24.87
1 2019-06-07 Max Labrador 28.35
2 2018-01-17 Stella Chihuahua 1.51
3 2019-10-19 Lucy Chow Chow 24.07
.. ... ... ... ...
71 2018-01-20 Stella Chihuahua 2.83
72 2019-06-07 Max Chow Chow 24.01
73 2018-08-20 Lucy Chow Chow 24.40
74 2019-04-22 Max Labrador 28.54
Um das zu erreichen, entfernst du Zeilen, deren Hundename bereits früher vorkommt – sprich, du nimmst jeden Namen nur einmal aus dem Datensatz.
Das erledigst du mit der Methode drop_duplicates. Sie nimmt das Argument subset, also die Spalte(n), anhand derer Duplikate bestimmt werden – hier wollen wir alle eindeutigen Namen.
vet_visits.drop_duplicates(subset="name")
date name breed weight_kg
0 2018-09-02 Bella Labrador 24.87
1 2019-06-07 Max Chow Chow 24.01
2 2019-03-19 Charlie Poodle 24.95
3 2018-01-17 Stella Chihuahua 1.51
4 2019-10-19 Lucy Chow Chow 24.07
7 2019-03-30 Cooper Schnauzer 16.91
10 2019-01-04 Bernie St. Bernard 74.98
(6 2019-06-07 Max Labrador 28.35)
Aber was ist, wenn es Hunde mit demselben Namen gibt?
Doppelte Paare entfernen
Dann müssen wir beim Entfernen von Duplikaten mehr als nur name berücksichtigen. Da Max und Max unterschiedlichen Rassen angehören, können wir Zeilen entfernen, in denen das Paar aus Name und Rasse bereits früher im Datensatz vorkam.
unique_dogs = vet_visits.drop_duplicates(subset=["name", "breed"])
print(unique_dogs)
date name breed weight_kg
0 2018-09-02 Bella Labrador 24.87
1 2019-03-13 Max Chow Chow 24.13
2 2019-03-19 Charlie Poodle 24.95
3 2018-01-17 Stella Chihuahua 1.51
4 2019-10-19 Lucy Chow Chow 24.07
6 2019-06-07 Max Labrador 28.35
7 2019-03-30 Cooper Schnauzer 16.91
10 2019-01-04 Bernie St. Bernard 74.98
Um Duplikate auf Basis mehrerer Spalten zu entfernen, übergeben wir dem Argument subset eine Liste von Spaltennamen – hier name und breed.
Jetzt sind beide Max enthalten.
Interaktives Beispiel
In dieser Übung erstellst du neue DataFrames mit eindeutigen Werten aus sales. sales ist vorhanden und pandas ist als pd importiert.
Du führst folgende Schritte aus:
- Entferne zunächst Zeilen aus
salesmit doppelten Paaren ausstoreundtype, speichere das alsstore_typesund gib den Kopf aus. - Entferne dann Zeilen aus
salesmit doppelten Paaren ausstoreunddepartment, speichere das alsstore_deptsund gib den Kopf aus. - Subsette die Zeilen, die Feiertagswochen sind, und entferne doppelte
date-Werte. Speichere das alsholiday_dates. - Wähle abschließend die Spalte
dateausholiday_datesund gib das DataFrameholiday_datesaus.
# Doppelte Kombinationen aus store/type entfernen
store_types = sales.drop_duplicates(subset=["store", "type"])
print(store_types.head())
# Doppelte Kombinationen aus store/department entfernen
store_depts = sales.drop_duplicates(subset=["store", "department"])
print(store_depts.head())
# Zeilen mit Feiertagswochen subsetten und doppelte Daten entfernen
holiday_dates = sales[sales["is_holiday"]].drop_duplicates(subset="date")
# Spalte date von holiday_dates ausgeben
print(holiday_dates["date"])
Wenn wir den obigen Code ausführen, erhalten wir folgendes Ergebnis:
store type department date weekly_sales is_holiday temperature_c fuel_price_usd_per_l unemployment
0 1 A 1 2010-02-05 24924.50 False 5.728 0.679 8.106
901 2 A 1 2010-02-05 35034.06 False 4.550 0.679 8.324
1798 4 A 1 2010-02-05 38724.42 False 6.533 0.686 8.623
2699 6 A 1 2010-02-05 25619.00 False 4.683 0.679 7.259
3593 10 B 1 2010-02-05 40212.84 False 12.411 0.782 9.765
store type department date weekly_sales is_holiday temperature_c fuel_price_usd_per_l unemployment
0 1 A 1 2010-02-05 24924.50 False 5.728 0.679 8.106
12 1 A 2 2010-02-05 50605.27 False 5.728 0.679 8.106
24 1 A 3 2010-02-05 13740.12 False 5.728 0.679 8.106
36 1 A 4 2010-02-05 39954.04 False 5.728 0.679 8.106
48 1 A 5 2010-02-05 32229.38 False 5.728 0.679 8.106
498 2010-09-10
691 2011-11-25
2315 2010-02-12
6735 2012-09-07
6810 2010-12-31
6815 2012-02-10
6820 2011-09-09
Name: date, dtype: datetime64[ns]
Um mehr über das Zählen und Aggregieren von Daten zu lernen, sieh dir dieses Video aus unserem Kurs Data Manipulation with pandas an.
Dieser Inhalt stammt aus dem DataCamp-Kurs Data Manipulation with pandas von Maggie Matsui und Richie Cotton.