La risposta attualmente selezionata non menziona il rename_axis
metodo che può essere utilizzato per rinominare i livelli di indice e colonna.
Panda ha qualche stranezza quando si tratta di rinominare i livelli dell'indice. È inoltre disponibile un nuovo metodo DataFrame rename_axis
per modificare i nomi a livello di indice.
Diamo un'occhiata a un DataFrame
df = pd.DataFrame({'age':[30, 2, 12],
'color':['blue', 'green', 'red'],
'food':['Steak', 'Lamb', 'Mango'],
'height':[165, 70, 120],
'score':[4.6, 8.3, 9.0],
'state':['NY', 'TX', 'FL']},
index = ['Jane', 'Nick', 'Aaron'])
Questo DataFrame ha un livello per ciascuno degli indici di riga e colonna. Sia l'indice di riga che quello di colonna non hanno nome. Cambiamo il nome del livello dell'indice di riga in "nomi".
df.rename_axis('names')
Il rename_axis
metodo ha anche la possibilità di cambiare i nomi a livello di colonna modificando il axis
parametro:
df.rename_axis('names').rename_axis('attributes', axis='columns')
Se si imposta l'indice con alcune delle colonne, il nome della colonna diventerà il nuovo nome del livello di indice. Aggiungiamo i livelli di indice al nostro DataFrame originale:
df1 = df.set_index(['state', 'color'], append=True)
df1
Notare come l'indice originale non ha nome. Possiamo ancora usare rename_axis
ma dobbiamo passare un elenco della stessa lunghezza del numero di livelli di indice.
df1.rename_axis(['names', None, 'Colors'])
È possibile utilizzare None
per eliminare in modo efficace i nomi a livello di indice.
Le serie funzionano in modo simile ma con alcune differenze
Creiamo una serie con tre livelli di indice
s = df.set_index(['state', 'color'], append=True)['food']
s
state color
Jane NY blue Steak
Nick TX green Lamb
Aaron FL red Mango
Name: food, dtype: object
Possiamo usare in rename_axis
modo simile a come abbiamo fatto con DataFrames
s.rename_axis(['Names','States','Colors'])
Names States Colors
Jane NY blue Steak
Nick TX green Lamb
Aaron FL red Mango
Name: food, dtype: object
Nota che c'è un pezzo extra di metadati sotto la serie chiamata Name
. Quando si crea una serie da un DataFrame, questo attributo è impostato sul nome della colonna.
Possiamo passare un nome stringa al rename
metodo per cambiarlo
s.rename('FOOOOOD')
state color
Jane NY blue Steak
Nick TX green Lamb
Aaron FL red Mango
Name: FOOOOOD, dtype: object
DataFrames non ha questo attributo e infatti genererà un'eccezione se usato in questo modo
df.rename('my dataframe')
TypeError: 'str' object is not callable
Prima dei panda 0.21, avresti potuto usare rename_axis
per rinominare i valori nell'indice e nelle colonne. È stato deprecato, quindi non farlo
rename_axis
metodo.