Partie 3 · Fonctions et bonnes pratiques
apply, map et colonnes dérivées
Pour créer une colonne à partir d'autres, on applique une fonction.
| Méthode | Portée | Usage |
|---|---|---|
.apply(f) | DataFrame : axis=0 (défaut) colonne par colonne, axis=1 ligne par ligne ; ou Series | logique personnalisée (statut selon un seuil, commission selon le produit) |
.map(dico) | Series uniquement | remplacer chaque valeur via un dictionnaire ('A' → 'Électronique') |
| calcul vectorisé | colonnes entières | df['TTC'] = df['HT'] * 1.2 |
Exemples du TP : statut « Importante » si le montant est supérieur à 150, « Normale » sinon ; commission de 10 % pour le produit A, 5 % pour B, 0 % sinon (fonction appliquée avec axis=1).
Vérifie que tu as compris
Quelle méthode remplace chaque valeur d'une colonne via un dictionnaire ?
Vérifie que tu as compris
Avec
df.apply(f, axis=1), la fonction f reçoit :À toi de coder
Efficacité et bonnes pratiques
- Vectorisation plutôt que boucles : les opérations directes sur Series/DataFrame (en C/NumPy) sont nettement plus rapides que les boucles
forou qu'un.apply()ligne par ligne. - Type
categorypour des chaînes très répétitives (faible cardinalité) : économie mémoire et accélération. - Chaînage de méthodes (
df.method1().method2()) : lisibilité d'une séquence d'opérations. - Affectation avec
.loc[](ou.iloc) : évite leSettingWithCopyWarninget garantit que le DataFrame original est modifié. Une affectation après un filtrage par simples crochets peut ne porter que sur une « vue » temporaire.
Équivalent Python pur : une compréhension de liste vaut mieux qu'une boucle avec append quand elle reste lisible ; on enchaîne les étapes en passant le résultat de l'une à la suivante.
Vérifie que tu as compris
Pourquoi utiliser
df.loc[masque, 'col'] = v plutôt que df[masque]['col'] = v ?Vérifie que tu as compris
Pour quelle colonne le type
category est-il le plus intéressant ?