Skip to content

pandas : Assigner une colonne existante à l’index d’un DataFrame avec set_index()

En utilisant set_index(), vous pouvez affecter une colonne existante de pandas.DataFrame à l’index (étiquette de ligne). La définition de noms uniques pour index facilite la sélection d’éléments avec loc et at.

Cet article décrit le contenu suivant.

  • Comment utiliser set_index()
    • Utilisation de base
    • Conservez la colonne spécifiée :drop
    • Attribuer plusieurs index
    • Conserver l’index d’origine sous forme de colonne
    • Modifier l’objet d’origine :inplace
  • Définir l’index lors de la lecture du fichier CSV
  • Sélectionner des lignes et des éléments à l’aide de l’index

Consultez l’article suivant pour savoir comment renommer index au lieu d’affecter une colonne existante à 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

Comment utiliser set_index()

Utilisation de base

Spécifiez le nom de la colonne à utiliser comme index dans les clés du premier argument.

df_i = df.set_index('name')
print(df_i)
#          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

Conserver la colonne spécifiée : :drop

Par défaut, la colonne spécifiée est supprimée, comme illustré dans l’exemple ci-dessus. Si l’argument drop est défini sur False, la colonne spécifiée est définie sur index et reste dans la colonne de données.

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

Attribuer plusieurs index

En utilisant set_index(), plusieurs colonnes peuvent être affectées en tant que multi-index.

Spécifier par liste

En spécifiant une liste de noms de colonnes dans les premières clés d’argument, plusieurs colonnes sont affectées en tant que multi-index.

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

Le tri avec sort_index() le rend bien affiché.

df_mi.sort_index(inplace=True)
print(df_mi)
#                age  point
# state name               
# CA    Bob       42     92
#       Charlie   18     70
#       Ellen     24     88
# NY    Alice     24     64
#       Frank     30     57
# TX    Dave      68     70

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

Ajoutez une colonne au multi-index :append

Par défaut, spécifier une nouvelle colonne avec set_index() supprime l’index d’origine.

print(df_i)
#          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

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

Si l’argument append est défini sur True, la colonne spécifiée sera ajoutée en tant que nouvel index de niveau.

df_mi = df_i.set_index('state', append=True)
print(df_mi)
#                age  point
# name    state            
# Alice   NY      24     64
# Bob     CA      42     92
# Charlie CA      18     70
# Dave    TX      68     70
# Ellen   CA      24     88
# Frank   NY      30     57

La colonne ajoutée est définie au niveau le plus bas. Si vous voulez permuter les niveaux, utilisez swaplevel().

print(df_mi.swaplevel(0, 1))
#                age  point
# state name               
# NY    Alice     24     64
# CA    Bob       42     92
#       Charlie   18     70
# TX    Dave      68     70
# CA    Ellen     24     88
# NY    Frank     30     57

Conserver l’index d’origine sous forme de colonne

Si vous définissez une colonne à indexer avec set_index() comme dans les exemples précédents, l’index d’origine sera supprimé.

Si vous souhaitez conserver l’index d’origine en tant que colonne, utilisez reset_index() pour réaffecter l’index à un numéro séquentiel commençant à 0.

print(df_i)
#          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

df_ri = df_i.reset_index()
print(df_ri)
#       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

Vous pouvez modifier l’index vers une autre colonne en utilisant set_index() après reset_index().

df_change = df_i.reset_index().set_index('state')
print(df_change)
#           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

Voir aussi l’article suivant pour reset_index().

Modifier l’objet d’origine :inplace

Par défaut, set_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.set_index('name', inplace=True)
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

Définir l’index lors de la lecture du fichier CSV

Lors de la lecture d’un fichier CSV et de la génération de pandas.DataFrame ou pandas.Series, si le fichier d’origine contient une colonne qui doit être utilisée comme index, elle peut également être spécifiée lors de la lecture.

Lors de la lecture d’un fichier avec read_csv(), la spécification du numéro de colonne dans l’argument index_col définit cette colonne sur l’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

Sélectionner des lignes et des éléments à l’aide de l’index

Comme dans les exemples précédents, si vous spécifiez des noms uniques pour l’index, vous pouvez facilement sélectionner des lignes et des éléments par leur nom.

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

print(df.loc['Bob'])
# age      42
# state    CA
# point    92
# Name: Bob, dtype: object

print(df.at['Bob', 'age'])
# 42

Consultez l’article suivant pour plus d’informations sur loc et at.