Come posso rinominare una colonna specifica in Panda?
Da v0.24 +, per rinominare una (o più) colonne alla volta,
Se devi rinominare TUTTE le colonne contemporaneamente,
DataFrame.set_axis()metodo con axis=1. Passa una sequenza simile a un elenco. Sono disponibili anche opzioni per modifiche sul posto.
rename con axis=1
df = pd.DataFrame('x', columns=['y', 'gdp', 'cap'], index=range(5))
df
y gdp cap
0 x x x
1 x x x
2 x x x
3 x x x
4 x x x
Con 0.21+, ora puoi specificare un axisparametro con rename:
df.rename({'gdp':'log(gdp)'}, axis=1)
# df.rename({'gdp':'log(gdp)'}, axis='columns')
y log(gdp) cap
0 x x x
1 x x x
2 x x x
3 x x x
4 x x x
(Si noti che renamenon è sul posto per impostazione predefinita, quindi sarà necessario assegnare nuovamente il risultato .)
Questa aggiunta è stata apportata per migliorare la coerenza con il resto dell'API. Il nuovo axisargomento è analogo al columnsparametro: fanno la stessa cosa.
df.rename(columns={'gdp': 'log(gdp)'})
y log(gdp) cap
0 x x x
1 x x x
2 x x x
3 x x x
4 x x x
rename accetta anche un callback che viene chiamato una volta per ogni colonna.
df.rename(lambda x: x[0], axis=1)
# df.rename(lambda x: x[0], axis='columns')
y g c
0 x x x
1 x x x
2 x x x
3 x x x
4 x x x
Per questo scenario specifico, si desidera utilizzare
df.rename(lambda x: 'log(gdp)' if x == 'gdp' else x, axis=1)
Simile al replacemetodo delle stringhe in python, Index panda e Series (solo tipo dtype) definiscono un str.replacemetodo ("vettoriale") per la sostituzione basata su stringhe e regex.
df.columns = df.columns.str.replace('gdp', 'log(gdp)')
df
y log(gdp) cap
0 x x x
1 x x x
2 x x x
3 x x x
4 x x x
Il vantaggio di questo rispetto agli altri metodi è che str.replacesupporta regex (abilitato per impostazione predefinita). Consulta i documenti per ulteriori informazioni.
Passando un elenco a set_axisconaxis=1
Chiama set_axiscon un elenco di intestazioni. L'elenco deve essere uguale in lunghezza alla dimensione di colonne / indice. set_axismuta il DataFrame originale per impostazione predefinita, ma puoi specificare inplace=Falsedi restituire una copia modificata.
df.set_axis(['cap', 'log(gdp)', 'y'], axis=1, inplace=False)
# df.set_axis(['cap', 'log(gdp)', 'y'], axis='columns', inplace=False)
cap log(gdp) y
0 x x x
1 x x x
2 x x x
3 x x x
4 x x x
Nota: nelle versioni future, l' inplaceimpostazione predefinita è True.
Metodo di concatenamento
Perché scegliere set_axisquando abbiamo già un modo efficiente di assegnare colonne df.columns = ...? Come mostrato da Ted Petrou in [questa risposta], ( https://stackoverflow.com/a/46912050/4909087 ) set_axisè utile quando si tenta di concatenare i metodi.
Confrontare
# new for pandas 0.21+
df.some_method1()
.some_method2()
.set_axis()
.some_method3()
Contro
# old way
df1 = df.some_method1()
.some_method2()
df1.columns = columns
df1.some_method3()
Il primo è una sintassi più naturale e a flusso libero.