Skip to content

pandas : Réinitialiser l’index d’un DataFrame, d’une série avec reset_index()

En utilisant reset_index(), l’index (étiquette de ligne) de pandas.DataFrame et pandas.Series peut être réaffecté au numéro séquentiel (numéro de ligne) à partir de 0.

Si les numéros de ligne sont utilisés comme index, il est plus pratique de réindexer lorsque l’ordre des lignes change après le tri ou lorsqu’un numéro manque après la suppression d’une ligne.

Il est également utilisé pour supprimer l’index actuel ou revenir à la colonne de données lors de l’utilisation du nom de ligne (chaîne) comme index. En utilisant set_index() et reset_index(), vous pouvez modifier l’index vers une autre colonne.

Cet article décrit le contenu suivant.

  • Utilisation de base de reset_index()
  • Changez l’index d’une autre colonne avec reset_index() et set_index()

Les données suivantes sont utilisées à titre d’exemple.

import pandas as pd

df = pd.read_csv('data/src/sample_pandas_normal.csv')
print(df)
#       name  age state  point
# 0    Alice   24    NY     64
# 1      Bob   42    CA     92
# 2  Charlie   18    CA     70
# 3     Dave   68    TX     70
# 4    Ellen   24    CA     88
# 5    Frank   30    NY     57

L’exemple utilise pandas.DataFrame, mais pandas.Series fournit également reset_index(). L’utilisation est la même.

Utilisation de base de reset_index()

Triez les lignes avec sort_values() pour l’explication.

Consultez l’article suivant pour plus de détails sur le tri avec sort_values() et sort_index().

df.sort_values('state', inplace=True)
print(df)
#       name  age state  point
# 1      Bob   42    CA     92
# 2  Charlie   18    CA     70
# 4    Ellen   24    CA     88
# 0    Alice   24    NY     64
# 5    Frank   30    NY     57
# 3     Dave   68    TX     70

Réassignez l’index aux numéros séquentiels à partir de 0 par reset_index().

Par défaut, l’index d’origine est ajouté en tant que nouvelle colonne.

df_r = df.reset_index()
print(df_r)
#    index     name  age state  point
# 0      1      Bob   42    CA     92
# 1      2  Charlie   18    CA     70
# 2      4    Ellen   24    CA     88
# 3      0    Alice   24    NY     64
# 4      5    Frank   30    NY     57
# 5      3     Dave   68    TX     70

Supprimez l’index d’origine :drop

Si le paramètre drop est défini sur True, l’index d’origine est supprimé.

df_r = df.reset_index(drop=True)
print(df_r)
#       name  age state  point
# 0      Bob   42    CA     92
# 1  Charlie   18    CA     70
# 2    Ellen   24    CA     88
# 3    Alice   24    NY     64
# 4    Frank   30    NY     57
# 5     Dave   68    TX     70

Modifier l’objet d’origine :inplace

Par défaut, reset_index() ne modifie pas l’objet d’origine et renvoie un nouvel objet, mais si l’argument inplace est défini sur True, l’objet d’origine est modifié.

df.reset_index(inplace=True, drop=True)
print(df)
#       name  age state  point
# 0      Bob   42    CA     92
# 1  Charlie   18    CA     70
# 2    Ellen   24    CA     88
# 3    Alice   24    NY     64
# 4    Frank   30    NY     57
# 5     Dave   68    TX     70

Changez l’index d’une autre colonne avec reset_index() et set_index()

Prenons comme exemple le cas où un nom de ligne (chaîne) est défini comme index.

df = pd.read_csv('data/src/sample_pandas_normal.csv', index_col=0)
print(df)
#          age state  point
# name                     
# Alice     24    NY     64
# Bob       42    CA     92
# Charlie   18    CA     70
# Dave      68    TX     70
# Ellen     24    CA     88
# Frank     30    NY     57

En utilisant reset_index(), des numéros séquentiels sont définis sur l’index et l’index d’origine est ajouté à la colonne de données.

df_r = df.reset_index()
print(df_r)
#       name  age state  point
# 0    Alice   24    NY     64
# 1      Bob   42    CA     92
# 2  Charlie   18    CA     70
# 3     Dave   68    TX     70
# 4    Ellen   24    CA     88
# 5    Frank   30    NY     57

Utilisez set_index() pour changer une autre colonne en index.

L’application de set_index() au DataFrame d’origine supprimera l’index d’origine.

df_s = df.set_index('state')
print(df_s)
#        age  point
# state            
# NY      24     64
# CA      42     92
# CA      18     70
# TX      68     70
# CA      24     88
# NY      30     57

Si vous souhaitez conserver l’index d’origine en tant que colonne de données, vous pouvez utiliser set_index() après reset_index().

df_rs = df.reset_index().set_index('state')
print(df_rs)
#           name  age  point
# state                     
# NY       Alice   24     64
# CA         Bob   42     92
# CA     Charlie   18     70
# TX        Dave   68     70
# CA       Ellen   24     88
# NY       Frank   30     57