Pandas : Maîtrisez la Manipulation de Données
Découvrez comment transformer et analyser des données comme un expert avec Pandas, la bibliothèque incontournable de la Data Science. Du débutant complet à la manipulation de fichiers réels, ce cours théorique vous équipe des fondamentaux essentiels.
1. Introduction à Pandas et aux DataFrames
Définition
Pandas est une bibliothèque Python open-source dédiée à la manipulation et l'analyse de données. Elle permet de travailler avec des structures de données tabulaires (similaires aux feuilles de calcul Excel) de manière puissante et efficace. Le cœur de Pandas repose sur deux structures principales : la Series (une colonne de données) et le DataFrame (un tableau complet avec plusieurs colonnes).
Analogie Simple
Imaginez Pandas comme un assistant Excel surpuissant. Si Excel est un outil manuel où vous cliquez sur les cellules, Pandas est l'automatisation complète : vous écrivez des instructions pour effectuer les mêmes tâches en millisecondes sur des millions de lignes. Là où Excel rechigne avec 100 000 lignes, Pandas en traite sans transpirer.
Tableau Comparatif
| Aspect | Excel | Pandas |
|---|---|---|
| Nombre de lignes | Limité (±1 million) | Illimité (GB de RAM) |
| Vitesse | Manuelle/Lente | Instantanée |
| Automatisation | VBA complexe | Code Python simple |
| Reproduction | Difficile | Parfaitement reproductible |
| Analyse statistique | Basique | Avancée |
Astuce Pratique
Avant d'acheter une licence Excel onéreuse ou de vous perdre dans des macros compliquées, considérez Pandas. C'est gratuit, plus puissant et il deviendra votre meilleur ami en Data Science. Installez-le simplement avec pip install pandas.
Attention Importante ⚠️
Pandas charge les données en mémoire RAM. Si votre fichier fait 5 GB et que vous n'avez que 4 GB de RAM libre, Pandas crashera. Ce n'est pas une limite de Pandas en soi, mais une réalité informatique à respecter. Pour les très gros fichiers, explorez Dask ou Spark.
2. Les Structures de Données Fondamentales
Définition
Les structures de données sont les conteneurs dans lesquels Pandas stocke vos informations. Il en existe deux principales : la Series, qui est un vecteur unidimensionnel (une colonne), et le DataFrame, qui est bidimensionnel (un tableau avec lignes et colonnes). Chaque élément dans une Series possède un index, et chaque colonne d'un DataFrame est une Series.
Analogie Simple
Une Series ressemble à une colonne unique dans un carnet de notes (ex: une liste de noms). Un DataFrame ressemble à votre carnet complet avec plusieurs colonnes : noms, prénoms, âges, adresses. Le DataFrame est simplement plusieurs Series collées côte à côte, partageant le même système de numérotation des lignes (index).
Tableau Détaillé des Structures
| Critère | Series | DataFrame |
|---|---|---|
| Dimensions | 1D (une colonne) | 2D (lignes + colonnes) |
| Ressemble à | Liste avec étiquettes | Feuille de calcul |
| Exemple | [10, 20, 30, 40] | Tableau complet avec noms et âges |
| Index | Oui (par défaut 0,1,2...) | Oui (par défaut 0,1,2...) |
| Accès | serie[0] |
df['colonne'][0] ou df.loc[0] |
Astuce Pratique
Utilisez df.head() immédiatement après charger vos données. Cette fonction affiche les 5 premières lignes et vous permet de vérifier rapidement que tout s'est bien chargé. C'est votre premier réflexe diagnostic en Data Science.
Attention Importante ⚠️
L'index dans Pandas n'est pas qu'un numéro de ligne : c'est un identifiant puissant que vous pouvez personnaliser. Ne le confondez pas avec la position. Deux données avec le même index peuvent être à des positions différentes après un tri ou un réarrangement.
3. Charger et Explorer les Données
Définition
Charger des données signifie lire un fichier (CSV, Excel, JSON, SQL, etc.) et le transformer en DataFrame Pandas, prêt à être analysé. L'exploration consiste à inspecter rapidement la structure, les types de données, les valeurs manquantes et les statistiques générales pour comprendre ce avec quoi vous travaillez.
Analogie Simple
Charger des données, c'est comme ouvrir une grosse boîte remplie de documents. L'exploration, c'est passer quelques minutes à regarder ce qu'il y a dedans, compter les documents, identifier les pages manquantes, et lire les titres. Cela vous prépare avant de vraiment vous plonger dans l'analyse détaillée.
Tableau des Fonctions d'Exploration Essentielles
| Fonction | Utilité | Exemple de Résultat |
|---|---|---|
df.shape |
Nombre de lignes et colonnes | (1000, 5) = 1000 lignes, 5 colonnes |
df.dtypes |
Type de chaque colonne | int64, object, float64, datetime64 |
df.info() |
Vue complète (type, mémoire, null) | Résumé structuré du DataFrame |
df.describe() |
Statistiques (moyenne, min, max) | Tableau statistique numérique |
df.isnull().sum() |
Nombre de valeurs manquantes | Compte par colonne |
df.head(10) |
Premières 10 lignes | Aperçu du contenu |
Astuce Pratique
Après pd.read_csv('fichier.csv'), enchaînez immédiatement avec .info() et .describe(). Cette habitude de 10 secondes vous sauve des heures de débogage ultérieurs. Vous connaîtrez immédiatement si vous avez des valeurs manquantes, des types incorrects, ou des données suspectes.
Attention Importante ⚠️
Quand vous chargez un CSV avec pd.read_csv(), Pandas essaie de deviner les types de colonnes. Parfois, il se trompe : une colonne de codes postaux devient un nombre au lieu de rester du texte. Utilisez l'argument dtype={'code_postal': 'str'} pour forcer les types si nécessaire.
4. Sélectionner et Filtrer les Données
Définition
Sélectionner des données signifie choisir certaines colonnes ou certaines lignes d'un DataFrame. Filtrer signifie garder uniquement les lignes qui respectent une condition (ex: âge > 30). Ces deux opérations sont fondamentales en analyse : vous travaillez rarement avec ALL les données brutes, mais plutôt avec un sous-ensemble pertinent.
Analogie Simple
Imaginez une énorme base de données client. Sélectionner une colonne, c'est demander juste les noms (pas les adresses ni les téléphones). Filtrer, c'est garder seulement les clients de Paris qui ont acheté dans les 3 derniers mois. Vous simplifiez le problème en ne gardant que ce qui compte.
Tableau des Méthodes de Sélection
| Méthode | Syntaxe | Cible | Résultat |
|---|---|---|---|
| Colonne unique | df['nom'] |
Une colonne | Retourne une Series |
| Plusieurs colonnes | df[['nom', 'age']] |
Colonnes spécifiques | Retourne un DataFrame |
| Par index (position) | df.iloc[0:10] |
Lignes 0 à 9 | Premières 10 lignes |
| Par étiquette | df.loc['2023-01-01'] |
Index spécifique | Une ou plusieurs lignes |
| Condition (filter) | df[df['age'] > 30] |
Lignes où age > 30 | Sous-ensemble filtré |
Astuce Pratique
Utilisez df[df['colonne'] > valeur] plutôt que des boucles for pour filtrer. C'est cent fois plus rapide car Pandas fonctionne au niveau vectorisé (opérations sur des blocs entiers plutôt que ligne par ligne). La performance en Data Science dépend de ces petits choix.
Attention Importante ⚠️
La différence entre df['colonne'] (crochets simples) et df[['colonne']] (crochets doubles) est cruciale. Le premier retourne une Series, le second retourne un DataFrame. C'est une source classique de bugs quand vous enchaînez les opérations. Testez toujours le type avec type(resultat).
5. Transformation et Nettoyage des Données
Définition
Transformer les données signifie les modifier, les réorganiser, ou en créer de nouvelles à partir des existantes (ex: créer une colonne "année" à partir d'une colonne "date"). Le nettoyage consiste à corriger les erreurs, gérer les valeurs manquantes, supprimer les doublons, et standardiser les formats. Ces étapes représentent 70% du travail réel d'un data scientist.
Analogie Simple
Transformer et nettoyer les données, c'est comme préparer les ingrédients avant de cuisiner. Vous découpez les oignons, enlevez les mauvaises herbes des légumes, versez l'eau sale. C'est fastidieux mais essentiel : si vous cuisinez avec des ingrédients sales, le plat entier est gâché. Vos analyses aussi.
Tableau des Opérations de Transformation Courantes
| Opération | Syntaxe | Objectif | Exemple |
|---|---|---|---|
| Créer colonne | df['new'] = df['col1'] + df['col2'] |
Ajouter une colonne calculée | Somme, concaténation |
| Renommer | df.rename(columns={'old': 'new'}) |
Changer le nom des colonnes | Clarté, standardisation |
| Supprimer doublon | df.drop_duplicates() |
Garder une seule copie | Intégrité données |
| Valeurs manquantes | df.fillna(0) ou df.dropna() |
Remplir ou supprimer les NaN | Continuité analyse |
| Changer type | df['col'].astype(int) |
Convertir le type d'une colonne | Préparation calculs |
| Trier | df.sort_values('colonne') |
Réorganiser par valeurs | Ordre logique |
Astuce Pratique
Créez une colonne de dates avec pd.to_datetime() dès que possible. Les colonnes datetime vous donnent accès à des propriétés magiques comme .dt.year, .dt.month, .dt.day_name() pour extraire facilement les composants. C'est tellement plus puissant que de manipuler des strings de dates.
Attention Importante ⚠️
Quand vous utilisez df.fillna(), df.drop_duplicates() ou df.dropna(), Pandas par défaut retourne une COPIE modifiée sans changer le DataFrame original. Si vous voulez modifier le DataFrame en place, ajoutez inplace=True. Sinon, votre transformation disparaît !