Skip to content

pandas: Azzeramento dell’indice di DataFrame, Serie con reset_index()

Python

utilizzando reset_index(), l’indice (etichetta di riga) di pandas.DataFrame e pandas.Series può essere riassegnato al numero sequenziale (numero di riga) a partire da 0.

Se i numeri di riga vengono utilizzati come indice, è più conveniente reindicizzare quando l’ordine delle righe cambia dopo l’ordinamento o quando un numero manca dopo l’eliminazione di una riga.

Viene anche utilizzato per eliminare l’indice corrente o tornare alla colonna dei dati quando si utilizza il nome della riga (stringa) come indice. Usando set_index() e reset_index(), puoi cambiare l’indice in un’altra colonna.

In questo articolo vengono descritti i seguenti contenuti.

  • Utilizzo di base di reset_index()
  • Cambia l’indice in un’altra colonna con reset_index() e set_index()

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

L’esempio utilizza pandas.DataFrame, ma pandas.Series fornisce anche reset_index(). L’uso è lo stesso.

Utilizzo di base di reset_index()

Ordina le righe con sort_values() per la spiegazione.

Vedere il seguente articolo per i dettagli sull’ordinamento con sort_values() e sort_index().

df.sort_values('state', inplace=True)
print(df)
#       name  age state  point
# 1      Bob   42    CA     92
# 2  Charlie   18    CA     70
# 4    Ellen   24    CA     88
# 0    Alice   24    NY     64
# 5    Frank   30    NY     57
# 3     Dave   68    TX     70

Riassegna l’indice a numeri sequenziali a partire da 0 tramite reset_index().

Per impostazione predefinita, l’indice originale viene aggiunto come una nuova colonna.

df_r = df.reset_index()
print(df_r)
#    index     name  age state  point
# 0      1      Bob   42    CA     92
# 1      2  Charlie   18    CA     70
# 2      4    Ellen   24    CA     88
# 3      0    Alice   24    NY     64
# 4      5    Frank   30    NY     57
# 5      3     Dave   68    TX     70

Elimina l’indice originale:drop

Se il parametro drop è impostato su True, l’indice originale viene eliminato.

df_r = df.reset_index(drop=True)
print(df_r)
#       name  age state  point
# 0      Bob   42    CA     92
# 1  Charlie   18    CA     70
# 2    Ellen   24    CA     88
# 3    Alice   24    NY     64
# 4    Frank   30    NY     57
# 5     Dave   68    TX     70

Cambia oggetto originale:inplace

Per configurare predefinito, reset_index() non modifica l’oggetto originale e contiene un nuovo oggetto, ma se l’argomento inplace è impostato su True, l’oggetto originale viene modificato.

df.reset_index(inplace=True, drop=True)
print(df)
#       name  age state  point
# 0      Bob   42    CA     92
# 1  Charlie   18    CA     70
# 2    Ellen   24    CA     88
# 3    Alice   24    NY     64
# 4    Frank   30    NY     57
# 5     Dave   68    TX     70

Cambia l’indice in un’altra colonna con reset_index() e set_index()

Prendi come esempio il caso in cui un nome di riga (stringa) è impostato come 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

Viene impostato reset_index(), i numeri sequenziali vengono impostati sull’indice e l’indice originale viene aggiunto alla colonna di dati.

df_r = df.reset_index()
print(df_r)
#       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

Usa set_index() per cambiare un’altra colonna in un indice.

L’applicazione di set_index() al DataFrame originale eliminerà l’indice originale.

df_s = df.set_index('state')
print(df_s)
#        age  point
# state            
# NY      24     64
# CA      42     92
# CA      18     70
# TX      68     70
# CA      24     88
# NY      30     57

Se vuoi mantenere l’indice originale come colonna di dati, puoi usare set_index() dopo reset_index().

df_rs = df.reset_index().set_index('state')
print(df_rs)
#           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