
È possibile rinominare (modificare) i nomi delle colonne/indici di pandas.DataFrame utilizzando i attributi metodi rename(), add_prefix(), add_suffix(), set_axis() o aggiornando gli attributi columns/index.
Puoi anche rinominare i nomi degli indici (etichette) di pandas.Series allo stesso modo.
In questo articolo vengono descritti i seguenti contenuti.
- Rinomina nome colonna/indice (etichetta):
rename()
- Modifica di più nomi di colonne/indici (etichette)
- Aggiorna l’oggetto originale:
inplace
- Rinomina con funzioni o espressioni lambda
- Aggiungi prefisso/suffisso ai nomi delle colonne:
add_prefix(), add_suffix()
- Rinomina tutti i nomi (etichette)
- asse_set()
- Aggiorna gli attributi di colonne/indice di pandas.DataFrame
- Per panda.Serie
Viene fornito anche il metodo set_index() che imposta una colonna esistente come indice. Vedere il seguente articolo per i dettagli.
Ad esempio, crea pandas.DataFrame come segue:
import pandas as pd
df = pd.DataFrame({'A': [11, 21, 31],
'B': [12, 22, 32],
'C': [13, 23, 33]},
index=['ONE', 'TWO', 'THREE'])
print(df)
# A B C
# ONE 11 12 13
# TWO 21 22 23
# THREE 31 32 33
Rinomina nome colonna/indice (etichetta):rename()
È possibile utilizzare il metodo rename() di pandas.DataFrame per modificare il nome della colonna/dell’indice.
Specificare il nome originale e il nuovo nome in dict come {nome originale: nuovo nome} in colonne/parametro indice di rename().
colonne è per il nome della colonna e index è per il nome dell’indice. Se si desidera cambiare uno dei due, è possibile specificare solo una delle colonne o un indice.
Viene restituito un nuovo DataFrame e il DataFrame originale non viene modificato.
df_new = df.rename(columns={'A': 'Col_1'}, index={'ONE': 'Row_1'})
print(df_new)
# Col_1 B C
# Row_1 11 12 13
# TWO 21 22 23
# THREE 31 32 33
print(df)
# A B C
# ONE 11 12 13
# TWO 21 22 23
# THREE 31 32 33
Modifica di più nomi di colonne/indici (etichette)
Puoi aggiungere più nomi di colonne/indici contemporaneamente aggiungendo un dict.
print(df.rename(columns={'A': 'Col_1', 'C': 'Col_3'}))
# Col_1 B Col_3
# ONE 11 12 13
# TWO 21 22 23
# THREE 31 32 33
Aggiorna l’oggetto originale:inplace
Per configurazione predefinita, il DataFrame originale non viene modificato e viene restituito un nuovo DataFrame.
L’impostazione del parametro inplace su True cambia il DataFrame originale. In questo caso, non viene restituito alcun nuovo DataFrame e il valore restituito è None.
df_copy = df.copy()
df_copy.rename(columns={'A': 'Col_1'}, index={'ONE': 'Row_1'}, inplace=True)
print(df_copy)
# Col_1 B C
# Row_1 11 12 13
# TWO 21 22 23
# THREE 31 32 33
Rinomina con funzioni o espressioni lambda
È inoltre possibile specificare funzioni (oggetti richiamabili) nel parametro index e colonne del metodoname().
Ad esempio, applica una funzione per maiuscole e minuscole:
print(df.rename(columns=str.lower, index=str.title))
# a b c
# One 11 12 13
# Two 21 22 23
# Three 31 32 33
Puoi anche applicare espressioni lambda.
print(df.rename(columns=lambda s: s*3, index=lambda s: s + '!!'))
# AAA BBB CCC
# ONE!! 11 12 13
# TWO!! 21 22 23
# THREE!! 31 32 33
Aggiungi prefisso/suffisso ai nomi delle colonne:add_prefix(), add_suffix()
I metodi add_prefix() e add_suffix() si aggiungono prefissi e suffissi ai nomi delle colonne.
La stringa specificata nell’argomento viene aggiunta all’inizio o alla fine dei nomi delle colonne.
print(df.add_prefix('X_'))
# X_A X_B X_C
# ONE 11 12 13
# TWO 21 22 23
# THREE 31 32 33
print(df.add_suffix('_X'))
# A_X B_X C_X
# ONE 11 12 13
# TWO 21 22 23
# THREE 31 32 33
add_prefix() e add_suffix() rinominano solo le colonne. Se vuoi aggiungere prefissi o suffissi all’indice, specifica l’espressione lambda nell’argomento con il metodo rename() come descritto sopra.
Inoltre, add_prefix() e add_suffix() non sono presenti. Se vuoi aggiornare l’oggetto originale, sovrascrivilo come df = df.add_prefix().
Rinomina tutti i nomi (etichette)
Per tutti i nomi, utilizzare il metodo set_axis() o aggiornare gli attributi di colonne/indice.
asse_set()
Puoi tutti i nomi di colonne/indici con il metodo set_axis() di pandas.DataFrame.
Specificare nuovi nomi di marchi di colonna/indice come prime etichette di parametri in un oggetto simile a un elenco come elenco o tu.
L’impostazione dell’asse del parametro su 0 o ‘indice’ aggiorna l’indice e l’impostazione su 1 o le colonne aggiornano le colonne. Se omesso, l’indice viene aggiornato.
print(df.set_axis(['Row_1', 'Row_2', 'Row_3'], axis=0))
# A B C
# Row_1 11 12 13
# Row_2 21 22 23
# Row_3 31 32 33
print(df.set_axis(['Row_1', 'Row_2', 'Row_3'], axis='index'))
# A B C
# Row_1 11 12 13
# Row_2 21 22 23
# Row_3 31 32 33
print(df.set_axis(['Col_1', 'Col_2', 'Col_3'], axis=1))
# Col_1 Col_2 Col_3
# ONE 11 12 13
# TWO 21 22 23
# THREE 31 32 33
print(df.set_axis(['Col_1', 'Col_2', 'Col_3'], axis='columns'))
# Col_1 Col_2 Col_3
# ONE 11 12 13
# TWO 21 22 23
# THREE 31 32 33
print(df.set_axis(['Row_1', 'Row_2', 'Row_3']))
# A B C
# Row_1 11 12 13
# Row_2 21 22 23
# Row_3 31 32 33
Si noti che viene generato un errore se la dimensione (numero di elementi) dell’elenco non corrisponde al numero di righe o colonne.
# print(df.set_axis(['Row_1', 'Row_2', 'Row_3', 'Row_4']))
# ValueError: Length mismatch: Expected axis has 3 elements, new values have 4 elements
Per configurazione predefinita, il DataFrame originale non viene modificato e viene restituito un nuovo DataFrame. L’impostazione del parametro inplace su True cambia il DataFrame originale.
df_copy = df.copy()
df_copy.set_axis(['Row_1', 'Row_2', 'Row_3'], inplace=True)
print(df_copy)
# A B C
# Row_1 11 12 13
# Row_2 21 22 23
# Row_3 31 32 33
Aggiorna gli attributi di colonne/indice di pandas.DataFrame
Puoi anche aggiornare direttamente le colonne e gli attributi di indice di pandas.DataFrame.
È possibile assegnare elenchi e tuple alle colonne e agli attributi dell’indice.
df.index = ['Row_1', 'Row_2', 'Row_3']
df.columns = ['Col_1', 'Col_2', 'Col_3']
print(df)
# Col_1 Col_2 Col_3
# Row_1 11 12 13
# Row_2 21 22 23
# Row_3 31 32 33
Si noti che viene generato un errore se la dimensione (numero di elementi) dell’elenco non corrisponde al numero di righe e colonne.
# df.index = ['Row_1', 'Row_2', 'Row_3', 'Row_4']
# ValueError: Length mismatch: Expected axis has 3 elements, new values have 4 elements
Per panda.Serie
È possibile modificare il nome dell’etichetta (indice) di pandas.come mostrato negli esempi precedenti di pandas.DataFrame.
Ad esempio, crea pandas.Series come segue:
s = pd.Series([1, 2, 3], index=['ONE', 'TWO', 'THREE'])
print(s)
# ONE 1
# TWO 2
# THREE 3
# dtype: int64
pandas.Series.rename()
print(s.rename({'ONE': 'a', 'THREE': 'c'}))
# a 1
# TWO 2
# c 3
# dtype: int64
print(s.rename(str.lower))
# one 1
# two 2
# three 3
# dtype: int64
pandas.Series.add_prefix(), pandas.Series.add_suffix()
print(s.add_prefix('X_'))
# X_ONE 1
# X_TWO 2
# X_THREE 3
# dtype: int64
print(s.add_suffix('_X'))
# ONE_X 1
# TWO_X 2
# THREE_X 3
# dtype: int64
panda.Series.set_axis()
print(s.set_axis(['a', 'b', 'c']))
# a 1
# b 2
# c 3
# dtype: int64
Aggiorna gli attributi dell’indice di pandas.Serie
s.index = ['a', 'b', 'c']
print(s)
# a 1
# b 2
# c 3
# dtype: int64