Module 3
Pandas - Le Couteau Suisse de l'Analyse de Données
Maîtriser les bases de Pandas : ses structures fondamentales (DataFrame et Series) et les opérations de sélection et de filtrage.
3.1. Pourquoi Pandas est-il Indispensable ?
Les données du monde réel sont rarement de simples grilles de nombres. Elles sont "désordonnées" :
- Elles ont des étiquettes (ex: "Chiffre d'affaires", "Âge des clients").
- Elles ont des types variés (texte, nombres, dates).
- Elles ont des trous (informations manquantes).
Pandas est la bibliothèque conçue spécifiquement pour nettoyer, manipuler et analyser ce type de données tabulaires. Imaginez-le comme une version programmable et surpuissante d'Excel.
3.2. Les Structures Fondamentales : DataFrame et Series
Pandas repose sur deux objets principaux :
- Series : Un tableau à une dimension, similaire à un tableau Numpy, mais avec un index. Pensez-y comme une seule colonne d'un tableur.
- DataFrame : La structure principale. C'est un tableau à deux dimensions (lignes et colonnes), comme un tableur complet. C'est une collection de Series qui partagent le même index.
DataFrame
+--------------------------------+
| Index | 'Nom' | 'Âge' | (Colonnes / Series)
+--------------------------------+
| 0 | 'Alice' | 25 |
| 1 | 'Bob' | 30 | (Lignes)
| 2 | 'Charlie'| 35 |
+--------------------------------+
3.3. Étape 1 : Créer et Charger des Données
Pour des tests rapides, on peut créer un DataFrame à partir d'un dictionnaire Python, où les clés sont les noms des colonnes et les valeurs sont des listes.
import pandas as pd
data = {
'Nom': ['Alice', 'Bob', 'Charlie', 'David'],
'Département': ['RH', 'IT', 'Marketing', 'IT'],
'Salaire': [50000, 75000, 60000, 82000]
}
df = pd.DataFrame(data)
La méthode la plus courante reste cependant le chargement à partir d'un fichier, notamment un fichier CSV, via la commande pd.read_csv('nom_du_fichier.csv').
3.4. Étape 2 : Inspecter et Explorer ses Données
Une fois votre DataFrame chargé, la première chose à faire est de l'inspecter pour comprendre sa structure et son contenu.
# Afficher les 5 premières lignes
print("Aperçu du DataFrame (.head()):\n", df.head())
# Afficher les dimensions (lignes, colonnes)
print("\nDimensions du DataFrame (.shape):", df.shape)
# Obtenir un résumé technique : type de chaque colonne, valeurs non nulles...
print("\nRésumé technique (.info()):")
df.info()
# Obtenir un résumé statistique pour les colonnes numériques
print("\nRésumé statistique (.describe()):\n", df.describe())
3.5. Étape 3 : Sélectionner et Filtrer
C'est ici que la puissance de Pandas se révèle. Il s'agit d'isoler précisément les données qui vous intéressent.
Sélection de Colonnes
# Sélectionner UNE seule colonne (renvoie une Series)
noms = df['Nom']
print("Type de df['Nom']:", type(noms))
# Sélectionner PLUSIEURS colonnes (renvoie un DataFrame)
infos_salaire = df[['Nom', 'Salaire']]
print("\nDataFrame avec Nom et Salaire:\n", infos_salaire)
Filtrage de Lignes par Condition
Cette technique se fait en créant une condition qui retourne une série de booléens (True/False), puis en utilisant cette série pour filtrer le DataFrame original.
# 1. Condition simple : trouver tous les employés du département IT
condition_it = df['Département'] == 'IT'
employes_it = df[condition_it]
print("\nEmployés du département IT:\n", employes_it)
# 2. Condition multiple : employés en IT QUI gagnent plus de 80000
# On utilise '&' pour ET, et '|' pour OU. Chaque condition est entre parenthèses.
condition_salaire_eleve_it = (df['Département'] == 'IT') & (df['Salaire'] > 80000)
gros_salaire_it = df[condition_salaire_eleve_it]
print("\nEmployés IT avec un salaire > 80k:\n", gros_salaire_it)
3.6. Étape 4 : Ajouter et Modifier des Colonnes
L'analyse implique souvent de créer de nouvelles informations à partir de celles qui existent déjà.
# Ajouter une nouvelle colonne (ex: une prime de 10% du salaire)
df['Prime'] = df['Salaire'] * 0.1
print("\nDataFrame avec la nouvelle colonne 'Prime':\n", df.head())
# Modifier une colonne existante
# df['Salaire'] = df['Salaire'] + 5000
Exercices Pratiques
Exercice 1 : Création et Inspection d'un DataFrame
Créez un DataFrame Pandas à partir du dictionnaire Python suivant, qui représente des informations sur des produits. Ensuite, utilisez les commandes appropriées pour afficher les 3 premières lignes et obtenir un résumé technique du DataFrame.
donnees_produits = {
'Produit': ['Laptop', 'Souris', 'Clavier', 'Écran'],
'Prix': [1200, 25, 80, 350],
'EnStock': [True, False, True, True]
}
Voir la solution
import pandas as pd
donnees_produits = {
'Produit': ['Laptop', 'Souris', 'Clavier', 'Écran'],
'Prix': [1200, 25, 80, 350],
'EnStock': [True, False, True, True]
}
# Création du DataFrame
df_produits = pd.DataFrame(donnees_produits)
# Affichage des 3 premières lignes
print("Aperçu des 3 premières lignes :\n", df_produits.head(3))
# Résumé technique
print("\nRésumé technique :")
df_produits.info()
Exercice 2 : Sélection et Ajout de Colonne
En utilisant le DataFrame de l'exercice précédent, sélectionnez uniquement les colonnes 'Produit' et 'Prix'. Ensuite, créez une nouvelle colonne 'Prix_TTC' qui contient le prix de chaque produit augmenté d'une TVA de 20%.
Voir la solution
import pandas as pd
# (Reprise du code de l'exercice 1 pour créer df_produits)
donnees_produits = { 'Produit': ['Laptop', 'Souris', 'Clavier', 'Écran'], 'Prix': [1200, 25, 80, 350], 'EnStock': [True, False, True, True] }
df_produits = pd.DataFrame(donnees_produits)
# Sélection des colonnes 'Produit' et 'Prix'
produits_prix = df_produits[['Produit', 'Prix']]
print("Sélection des colonnes :\n", produits_prix)
# Ajout de la colonne 'Prix_TTC'
df_produits['Prix_TTC'] = df_produits['Prix'] * 1.20
print("\nDataFrame avec prix TTC :\n", df_produits.head())
Exercice 3 : Filtrage par Conditions Multiples
À partir du DataFrame de produits (après ajout de la colonne 'Prix_TTC'), trouvez tous les produits qui sont en stock ET dont le prix TTC est inférieur à 100€.
Voir la solution
import pandas as pd
# (Reprise du code des exercices précédents pour créer df_produits avec 'Prix_TTC')
donnees_produits = { 'Produit': ['Laptop', 'Souris', 'Clavier', 'Écran'], 'Prix': [1200, 25, 80, 350], 'EnStock': [True, False, True, True] }
df_produits = pd.DataFrame(donnees_produits)
df_produits['Prix_TTC'] = df_produits['Prix'] * 1.20
# Définition des conditions
condition_stock = df_produits['EnStock'] == True
condition_prix = df_produits['Prix_TTC'] < 100
# Application du filtre combiné
produits_filtres = df_produits[condition_stock & condition_prix]
print("Produits en stock avec un prix TTC < 100€ :\n", produits_filtres)