
Usando set_index(), puoi concedere una colonna esistente di pandas.Datame a index (etichetta di riga). L’impostazione di nomi univoci per l’indice semplifica la selezione degli elementi con loc e at.
In questo articolo vengono descritti i seguenti contenuti.
- Vieni a usare set_index()
- Utilizzo di base
- Mantieni la colonna specificata:
drop
- Assegna multiindice
- Mantieni l’indice originale come una colonna
- Cambia oggetto originale:
inplace
- Imposta l’indice durante la lettura del file CSV
- Seleziona righe ed elementi usando index
Vedere l’articolo seguente per come rinominare l’indice invece di trasmettere una colonna esistente all’indice.
I seguenti dati sono usati come esempio.
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
Vieni a usare set_index()
Utilizzo di base
Specificare il nome della colonna da utilizzare come indice nelle prime chiavi di argomento.
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
Mantieni la colonna specificata: :drop
Per impostazione predefinita, la colonna specificata viene eliminata, come mostrato nell’esempio precedente. Se l’argomento drop è impostato su False, la colonna specificata viene impostata su index e rimane nella colonna di dati.
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
Assegna multiindice
utilizzando set_index(), più colonne possono essere assegnate come multi-indice.
Specificare per elenco
Specificando un elenco di nomi di colonna nelle prime chiavi di argomento, più colonne vengono assegnate come multi-indice.
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
L’ordinamento con sort_index() lo rende in modo ordinato.
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
Vedere il seguente articolo per i dettagli sull’ordinamento con sort_values() e sort_index().
Aggiungi una colonna al multiindice:append
Per impostazione predefinita, specificando una nuova colonna con set_index() si elimina l’indice originale.
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
Se l’argomento append è impostato su True, la colonna specifica verrà aggiunta come nuovo indice di livello.
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 colonna aggiunta è impostata sul livello più basso. Se vuoi scambiare i livelli, usa 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
Mantieni l’indice originale come una colonna
Se imposti una colonna su index con set_index() come negli esempi precedenti, l’indice originale verrà eliminato.
Se vuoi mantenere l’indice originale come colonna, usa reset_index() per riassegnare l’indice a un numero sequenziale che inizia da 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
È possibile modificare l’indice utilizzando una colonna diversa set_index() dopo 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
Vedi anche il seguente articolo per reset_index().
Cambia oggetto originale:inplace
Per configurare predefinito, set_index() non modifica l’oggetto originale e viene trasferito un nuovo oggetto, ma se l’argomento inplace è impostato su True, l’oggetto originale viene modificato.
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
Imposta l’indice durante la lettura del file CSV
Quando si legge da un file CSV e si genera pandas.DataFrame o pandas.Series, se il file originale contiene una colonna che deve essere utilizzato come indice, può anche essere specificata durante la lettura.
Quando si legge un file con read_csv(), specificando il numero di colonna nell’argomento index_col imposta quella colonna sull’indice.。
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
Seleziona righe ed elementi usando index
Come negli esempi precedenti, se si specificano nomi univoci per l’indice, è possibile selezionare facilmente righe ed elementi in base al nome.
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
Vedere il seguente articolo per ulteriori informazioni su loc e at.