Pandas & NumPy Academy · Leçon

Définir et réinitialiser l’index

Élevez une colonne au rang d’index des lignes avec set_index(), rétablissez-la avec reset_index() et découvrez la vue d’ensemble d’un MultiIndex.

Leçon 4 sur 413 étapes

Définir et réinitialiser l’index est une leçon Pandas & NumPy Academy gratuite sur CoddyKit. Ceci est la leçon 4 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Pandas & NumPy Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Pandas & NumPy Academy comprend 4 leçons au total.

Qu’est-ce que l’index du DataFrame ?

Chaque DataFrame Pandas possède un index de lignes : un ensemble d’étiquettes associées à chaque ligne. L’index par défaut est un RangeIndex (0, 1, 2, …), mais vous pouvez le remplacer par n’importe quelle colonne qui joue le rôle d’identifiant naturel : une date, un identifiant de produit, un identifiant utilisateur ou toute clé unique. Un index pertinent améliore la lisibilité, permet la sélection fondée sur les étiquettes et est nécessaire pour le rééchantillonnage des séries temporelles.

import pandas as pd

df = pd.DataFrame({
    'date': ['2024-01-01', '2024-01-02', '2024-01-03'],
    'sales': [100, 200, 150]
})
print('Default index:', df.index.tolist())  # [0, 1, 2]
print(df)

set_index() — Promouvoir une colonne

DataFrame.set_index('col') transforme la colonne indiquée en index de lignes et la retire des colonnes ordinaires. Les valeurs de la colonne deviennent les étiquettes des lignes. C’est la méthode standard pour rendre un DataFrame plus explicite lorsqu’une colonne joue le rôle de clé naturelle. Un nouveau DataFrame est renvoyé ; l’original reste inchangé, sauf si vous utilisez inplace=True.

import pandas as pd

df = pd.DataFrame({
    'date': ['2024-01-01', '2024-01-02', '2024-01-03'],
    'sales': [100, 200, 150]
})

df = df.set_index('date')
print(df)
#             sales
# date
# 2024-01-01    100
# 2024-01-02    200
# 2024-01-03    150

print(df.index)  # Index(['2024-01-01', ...], dtype='object', name='date')

Sélectionner des lignes avec un index personnalisé

Une fois qu’une colonne pertinente est devenue l’index, vous pouvez utiliser .loc[label] pour récupérer des lignes par leur étiquette avec une syntaxe claire et lisible, sans masque booléen. Avec un DatetimeIndex, vous pouvez même utiliser des chaînes de dates partielles comme df.loc['2024-01'] pour sélectionner toutes les lignes de janvier 2024.

import pandas as pd

df = pd.DataFrame({
    'product': ['A', 'B', 'C'],
    'price': [10, 20, 30],
    'stock': [100, 50, 75]
})
df = df.set_index('product')

# Access row by label
print(df.loc['B'])
# price    20
# stock    50
# Name: B, dtype: int64

set_index() avec plusieurs colonnes — MultiIndex

Le fait de transmettre une liste de noms de colonnes à set_index() crée un MultiIndex (index hiérarchique). Le DataFrame obtenu peut être consulté à l’aide de tuples dans .loc[]. MultiIndex est essentiel pour les séries temporelles groupées (région + date), les données de panel (sujet + temps) et toute analyse nécessitant un regroupement des lignes sur deux niveaux.

import pandas as pd

df = pd.DataFrame({
    'region': ['East', 'East', 'West', 'West'],
    'year': [2023, 2024, 2023, 2024],
    'revenue': [100, 150, 200, 220]
})

df = df.set_index(['region', 'year'])
print(df)
#              revenue
# region year
# East   2023      100
#        2024      150
# West   2023      200
#        2024      220

print(df.loc[('East', 2024)])  # revenue = 150

Paramètre drop= dans set_index()

Par défaut, set_index('col') retire la colonne des colonnes ordinaires du DataFrame lorsqu’elle devient l’index. Transmettez drop=False pour conserver la colonne tout en l’utilisant comme index. Cette option est parfois utile lorsque vous souhaitez un accès fondé sur les étiquettes, tout en ayant besoin de la colonne pour des calculs dans l’espace des colonnes ordinaires.

import pandas as pd

df = pd.DataFrame({'id': [1, 2, 3], 'value': [10, 20, 30]})

# Keep 'id' as both index and column
df_with_both = df.set_index('id', drop=False)
print(df_with_both)
#     id  value
# id
# 1    1     10
# 2    2     20
# 3    3     30

reset_index() — Replacer l’index dans une colonne

reset_index() est l’inverse de set_index() : elle replace l’index actuel des lignes dans une colonne ordinaire et remplace l’index par défaut par un RangeIndex. Cette opération est souvent nécessaire après un groupby().agg() ou après des opérations qui vous laissent avec un index pertinent que vous devez utiliser comme colonne pour la suite du traitement.

import pandas as pd

df = pd.DataFrame({'sales': [100, 200]}, index=['East', 'West'])
df.index.name = 'region'

reset = df.reset_index()
print(reset)
#   region  sales
# 0   East    100
# 1   West    200

print(reset.index.tolist())  # [0, 1] — default RangeIndex restored

reset_index(drop=True)

Transmettre drop=True à reset_index() supprime entièrement l’index actuel au lieu de le déplacer dans une colonne. Utilisez cette option lorsque l’index actuel ne contient aucune information pertinente (par exemple, après le filtrage de lignes, lorsque l’index comporte des intervalles comme 0, 3, 7) et que vous souhaitez simplement un index séquentiel propre commençant à 0.

import pandas as pd

df = pd.DataFrame({'x': [10, 20, 30, 40, 50]})
filtered = df[df['x'] > 15]
print('Filtered index:', filtered.index.tolist())  # [1, 2, 3, 4]

# Drop the old index — don't move it to a column
clean = filtered.reset_index(drop=True)
print('Clean index:', clean.index.tolist())  # [0, 1, 2, 3]

reset_index() après groupby

Après l’appel à groupby().agg(), les clés de regroupement deviennent l’index. L’appel à reset_index() les reconvertit en colonnes ordinaires et fournit un résultat tabulaire plat, plus facile à manipuler, à fusionner ou à exporter. C’est l’une des utilisations les plus courantes de reset_index() en pratique.

import pandas as pd

df = pd.DataFrame({
    'dept': ['Eng', 'HR', 'Eng', 'Sales', 'HR'],
    'salary': [90000, 50000, 80000, 70000, 55000]
})

# After groupby, dept becomes the index
agg = df.groupby('dept')['salary'].mean()
print(type(agg), agg.index.tolist())
# dept is the index

# Reset makes dept a regular column again
result = agg.reset_index()
result.columns = ['dept', 'avg_salary']
print(result)

rename_axis() pour nommer l’index

Lorsque l’index des lignes n’a pas de nom, ou lorsque vous souhaitez le renommer pour plus de clarté, utilisez df.rename_axis('new_name') (pour l’index des lignes) ou df.rename_axis('col_name', axis=1) (pour l’axe des colonnes). Donner un nom pertinent à l’index rend le résultat plus explicite, en particulier lors de l’exportation vers un fichier CSV, où le nom de l’index devient un en-tête de colonne.

import pandas as pd

df = pd.DataFrame({'sales': [100, 200, 300]}, index=['A', 'B', 'C'])
print(df.index.name)  # None

# Name the index
df = df.rename_axis('region')
print(df)
#         sales
# region
# A         100
# B         200
# C         300

Réindexer pour combler les intervalles

DataFrame.reindex(new_index) remodèle le DataFrame pour l’adapter à un nouvel index et remplit de NaN les positions présentes dans le nouvel index mais absentes des données d’origine. Cette opération sert à aligner des DataFrames sur un index complet commun, par exemple pour s’assurer que chaque mois d’une année apparaît, même si aucune donnée n’existe pour certains mois.

import pandas as pd

df = pd.DataFrame({
    'month': ['Jan', 'Mar', 'Jun'],
    'revenue': [100, 200, 300]
}).set_index('month')

all_months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun']
complete = df.reindex(all_months)
print(complete)
#       revenue
# Jan     100.0
# Feb       NaN   <- filled with NaN
# Mar     200.0
# Apr       NaN
# May       NaN
# Jun     300.0

reset_index et sélection des niveaux d’un MultiIndex

Pour un DataFrame doté d’un MultiIndex, reset_index() replace par défaut tous les niveaux dans des colonnes. Transmettez level= pour ne réinitialiser que certains niveaux. Cette possibilité est utile lorsque vous souhaitez conserver un niveau comme index (par exemple, garder la date comme index) et déplacer uniquement l’autre niveau dans une colonne.

import pandas as pd

df = pd.DataFrame(
    {'revenue': [100, 150, 200, 220]},
    index=pd.MultiIndex.from_tuples(
        [('East', 2023), ('East', 2024), ('West', 2023), ('West', 2024)],
        names=['region', 'year']
    )
)

# Reset only the 'year' level, keep 'region' as index
df2 = df.reset_index(level='year')
print(df2)
#         year  revenue
# region
# East    2023      100
# East    2024      150
# West    2023      200
# West    2024      220

Vérification rapide

Vérifiez votre compréhension de la définition et de la réinitialisation de l’index.

Récapitulatif de la leçon

Dans cette leçon, vous avez appris que set_index('col') transforme une colonne en index de lignes pour permettre un accès fondé sur les étiquettes, que la transmission d’une liste crée un MultiIndex et que reset_index() replace l’index dans une colonne (utilisez drop=True pour le supprimer à la place). Utilisez reindex() pour aligner les données sur un index cible complet en remplissant de NaN les positions manquantes. Ces techniques sont fondamentales pour les prochaines leçons consacrées à GroupBy et à la fusion.

Gratuit pour commencer

Apprends Python avec un tuteur IA — gratuit

Écris et exécute du vrai code dans ton navigateur, obtiens de l'aide instantanée d'un tuteur IA disponible 24h/24, et reprends là où tu t'es arrêté sur le web ou dans l'app.

Cours
30
Leçons
120

Questions Fréquemment Posées

La leçon « Définir et réinitialiser l’index » est-elle gratuite ?

Oui — le texte complet de « Définir et réinitialiser l’index » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Pandas & NumPy Academy, passe à CoddyKit PRO. Le cours Pandas & NumPy Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Définir et réinitialiser l’index » ?

Élevez une colonne au rang d’index des lignes avec set_index(), rétablissez-la avec reset_index() et découvrez la vue d’ensemble d’un MultiIndex. Tu pratiques Pandas & NumPy Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer Pandas & NumPy Academy ?

Aucune expérience préalable n'est requise. Pandas & NumPy Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 4 sur 4.

Combien de temps prend la leçon « Définir et réinitialiser l’index » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon Pandas & NumPy Academy ?

Oui. Chaque leçon Pandas & NumPy Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Trier par valeurs de colonne
  2. Trier par index
  3. Classer les valeurs
  4. Définir et réinitialiser l’index
← Retour à Pandas & NumPy Academy