50% off DataCamp Premium. 700+ courses, half price. Start learning today.
Duplicaten verwijderen is essentieel om accurate tellingen te krijgen, omdat je vaak niet hetzelfde item meerdere keren wilt meetellen. In Python kun je dit doen met de Pandas-module, die een methode heeft genaamd drop_duplicates.
Laten we met een paar voorbeelden bekijken hoe je deze gebruikt.
Duplicaatnamen verwijderen
Stel, je hebt een dataframe met dierenartsbezoeken en de dierenartspraktijk wil weten hoeveel honden van elk ras hun praktijk hebben bezocht. In je dataset staan echter honden zoals Max en Stella die meer dan eens bij de dierenarts zijn geweest. Je kunt dus niet simpelweg het aantal van elk ras in de kolom breed tellen.
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
Om dit te bereiken, verwijder je rijen die een hondennaam bevatten die eerder al voorkomt; met andere woorden: je haalt elke hondennaam slechts één keer uit de dataset.
Dit doe je met de methode drop_duplicates. Die neemt een argument subset, de kolom waarop we duplicaten willen vinden. In dit geval willen we alle unieke 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)
Maar wat als we honden met dezelfde naam hebben?
Dubbele paren verwijderen
In dat geval moeten we naar meer kijken dan alleen name bij het verwijderen van duplicaten. Aangezien Max en Max verschillende rassen zijn, kunnen we de rijen verwijderen met paren van namen en rassen die eerder in de dataset voorkomen.
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
Om het verwijderen van duplicaten op meerdere kolommen te baseren, geven we een lijst met kolomnamen door aan het argument subset, in dit geval name en breed.
Nu zijn beide Maxen opgenomen.
Interactief voorbeeld
In deze oefening maak je een paar nieuwe DataFrames met unieke waarden uit sales. sales is beschikbaar en pandas is geïmporteerd als pd.
Je voert de volgende stappen uit:
- Verwijder eerst rijen uit
salesmet dubbele paren vanstoreentype, sla dit op alsstore_typesen print de head. - Verwijder daarna rijen uit
salesmet dubbele paren vanstoreendepartment, sla dit op alsstore_deptsen print de head. - Subset de rijen die feestdagweken zijn en verwijder de dubbele
dates; sla dit op alsholiday_dates. - Selecteer tot slot de kolom
datevanholiday_datesen print de dataframeholiday_dates.
# Drop duplicate store/type combinations
store_types = sales.drop_duplicates(subset=["store", "type"])
print(store_types.head())
# Drop duplicate store/department combinations
store_depts = sales.drop_duplicates(subset=["store", "department"])
print(store_depts.head())
# Subset the rows that are holiday weeks and drop duplicate dates
holiday_dates = sales[sales["is_holiday"]].drop_duplicates(subset="date")
# Print date col of holiday_dates
print(holiday_dates["date"])
Als we bovenstaande code uitvoeren, krijgen we het volgende resultaat:
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]
Wil je meer leren over het tellen en aggregeren van data? Bekijk dan deze video uit onze cursus Data Manipulation with pandas.
Deze content is afkomstig uit DataCamp’s cursus Data Manipulation with pandas van Maggie Matsui en Richie Cotton.
Onderwerpen
