Les Series Pandas
Introduction
Une Series Pandas est une structure de données fondamentale de la bibliothèque Pandas. Elle représente un tableau unidimensionnel de données associé à un index étiqueté. C’est cet index nominatif (labels) qui distingue une Series d’une liste Python et d’un array NumPy, qui possède uniquement un index numérique.
| Structure | Index |
|---|---|
| Liste Python | implicite (positions) |
numpy.ndarray | numérique |
pandas.Series | numérique + étiqueté |
📌 Une Series = données + index étiqueté
👉 Définition formelle
Une Series Pandas est :
- un tableau 1D
- avec des étiquettes d’axes (labels)
- basé sur NumPy (performant et vectorisé)
Series Pandas VS array NumPy
array NumPy :
| Index | Data |
|---|---|
| 0 | 1776 |
| 1 | 1867 |
| 2 | 1821 |
Series Pandas :
| Labeled Index | Data |
|---|---|
| USA | 1776 |
| CANADA | 1867 |
| MEXICO | 1821 |
Pourquoi utiliser une Series ?
1. Index étiqueté (clé → valeur)
L’index peut être :
- des chaînes de caractères
- des entiers
- tout objet hashable
Cela permet :
- une lecture plus naturelle
- une extraction plus claire
- un code plus proche des données réelles
2. Double accès aux données
Une Series conserve :
- un index numérique (position)
- un index étiqueté (label)
👉 On peut accéder aux valeurs par position ou par label
Series Pandas
| Index | Labeled Index | Data |
|---|---|---|
| 0 | USA | 1776 |
| 1 | CANADA | 1867 |
| 2 | MEXICO | 1821 |
3. Performances et opérations vectorisées
Les Series reposent sur NumPy :
- opérations rapides
- diffusion automatique (broadcasting)
- pas besoin de boucles
for
Fichier Python associé
Le fichier suivant contient tous les exemples de création et d’opérations sur les Series Pandas :
Series
py
"""
series_basics.py
Bases des Series Pandas
"""
import pandas as pd
import numpy as np
# ======================================================
# 1. Création d'une Series à partir d'une liste
# ======================================================
data = [1776, 1867, 1821]
series_numeric_index = pd.Series(data)
print("Series avec index numérique par défaut:")
print(series_numeric_index)
print()
# ======================================================
# 2. Création d'une Series avec un index étiqueté
# ======================================================
countries = ["USA", "Canada", "Mexico"]
independence_years = [1776, 1867, 1821]
series_labeled = pd.Series(independence_years, index=countries)
print("Series avec index étiqueté:")
print(series_labeled)
print()
# ======================================================
# 3. Accès aux éléments
# ======================================================
print("Accès par position (index numérique):")
print(series_labeled[0]) # USA
print()
print("Accès par label:")
print(series_labeled["USA"])
print()
# ======================================================
# 4. Création d'une Series à partir d'un dictionnaire
# ======================================================
ages = {
"Sam": 5,
"Frank": 10,
"Spike": 7
}
series_from_dict = pd.Series(ages)
print("Series créée à partir d'un dictionnaire:")
print(series_from_dict)
print()
# ======================================================
# 5. Vérification des index
# ======================================================
print("Index de la series_from_dict:")
print(series_from_dict.index)
print()
# ======================================================
# 6. Series de ventes (exemple Q1 / Q2)
# ======================================================
sales_q1_dict = {
"Japan": 80,
"China": 150,
"India": 200,
"USA": 130
}
sales_q2_dict = {
"Brazil": 100,
"China": 165,
"India": 210,
"USA": 140
}
sales_q1 = pd.Series(sales_q1_dict)
sales_q2 = pd.Series(sales_q2_dict)
print("Ventes Q1:")
print(sales_q1)
print()
print("Ventes Q2:")
print(sales_q2)
print()
# ======================================================
# 7. Opérations scalaires (broadcasting)
# ======================================================
print("Ventes Q1 multipliées par 2:")
print(sales_q1 * 2)
print()
print("Ventes Q1 en centaines:")
print(sales_q1 / 100)
print()
# ======================================================
# 8. Opérations entre Series (alignement sur l'index)
# ======================================================
print("Addition directe Q1 + Q2 (avec NaN):")
total_sales_na = sales_q1 + sales_q2
print(total_sales_na)
print()
# ======================================================
# 9. Addition avec gestion des valeurs manquantes
# ======================================================
print("Addition avec fill_value=0:")
total_sales = sales_q1.add(sales_q2, fill_value=0)
print(total_sales)
print()
# ======================================================
# 10. Types de données (dtype)
# ======================================================
print("Type des données Q1:")
print(sales_q1.dtype)
print()
print("Type des données après addition:")
print(total_sales.dtype)
print()
# ======================================================
# 11. Conversion de type
# ======================================================
total_sales_int = total_sales.astype("int64")
print("Total des ventes converti en int64:")
print(total_sales_int)
print()
# ======================================================
# 12. Attributs importants d'une Series
# ======================================================
print("Valeurs (NumPy array):")
print(total_sales.values)
print()
print("Index:")
print(total_sales.index)
print()
print("Shape:")
print(total_sales.shape)
print()