Cours
Supprimer les doublons est indispensable pour obtenir des comptages fiables, car vous ne voulez généralement pas compter la même chose plusieurs fois. En Python, vous pouvez le faire avec le module pandas, qui propose la méthode drop_duplicates.
Voyons comment l'utiliser à travers quelques exemples.
Supprimer les doublons de noms
Supposons que vous ayez un DataFrame qui recense des visites chez le vétérinaire, et que le cabinet souhaite connaître combien de chiens de chaque race ont été vus. Dans votre jeu de données, certains chiens comme Max et Stella sont venus plusieurs fois. Vous ne pouvez donc pas simplement compter les occurrences de chaque race dans la colonne des races.
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
Pour y parvenir, vous allez retirer les lignes où le nom du chien est déjà apparu plus tôt ; autrement dit, vous n'extrairez qu'un chien par nom dans l'ensemble de données.
On utilise pour cela la méthode drop_duplicates. Elle prend un argument subset, qui indique la ou les colonnes sur lesquelles détecter les doublons — ici, nous voulons obtenir tous les noms uniques.
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)
Mais que faire si plusieurs chiens portent le même nom ?
Supprimer les paires en doublon
Dans ce cas, il faut tenir compte de plus que la seule colonne name. Comme les deux Max n'ont pas la même race, on peut supprimer les lignes en se basant sur la paire nom + race déjà rencontrée plus tôt dans le jeu de données.
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
Pour supprimer les doublons sur plusieurs colonnes, on passe une liste de noms de colonnes à l'argument subset, ici name et breed.
Les deux Max sont maintenant conservés.
Exemple interactif
Dans cet exercice, vous allez créer de nouveaux DataFrames à partir des valeurs uniques de sales. sales est disponible et pandas est importé sous l'alias pd.
Vous effectuerez les étapes suivantes :
- Commencez par supprimer de
salesles lignes avec des paires en doublonstoreettype, enregistrez le résultat dansstore_typeset affichez l'en-tête. - Ensuite, supprimez de
salesles lignes avec des paires en doublonstoreetdepartment, enregistrez le résultat dansstore_deptset affichez l'en-tête. - Sous-sélectionnez les lignes correspondant aux semaines fériées et supprimez les dates en doublon, puis enregistrez le résultat dans
holiday_dates. - Enfin, sélectionnez la colonne
datedeholiday_dateset affichez le DataFrameholiday_dates.
# Supprimer les combinaisons en doublon store/type
store_types = sales.drop_duplicates(subset=["store", "type"])
print(store_types.head())
# Supprimer les combinaisons en doublon store/department
store_depts = sales.drop_duplicates(subset=["store", "department"])
print(store_depts.head())
# Ne garder que les semaines fériées et supprimer les dates en doublon
holiday_dates = sales[sales["is_holiday"]].drop_duplicates(subset="date")
# Afficher la colonne date de holiday_dates
print(holiday_dates["date"])
À l'exécution, le code ci-dessus produit le résultat suivant :
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]
Pour en savoir plus sur le comptage et l'agrégation des données, regardez cette vidéo issue de notre cours Data Manipulation with pandas.
Ce contenu est extrait du cours Data Manipulation with pandas de DataCamp, par Maggie Matsui et Richie Cotton.