Skip to content

pandas: Rinominare i nomi di colonne/indici (etichette) di DataFrame

Python

È 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