
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.
