Converti l'indice di un DataFrame Pandas in una colonna

Asad Riaz 30 gennaio 2023
  1. df.index per aggiungere un indice come nuova colonna
  2. reset_index Con rename_axis per rinominare il nome della colonna dell’indice corrente
  3. Metodo set_index per convertire la colonna in indice
  4. MultiIndex per impostare più livelli di indexes su column
Converti l'indice di un DataFrame Pandas in una colonna

Introdurremo vari metodi per convertire l’index di un DataFrame di Pandas in una colonna, come df.index, set_index e reset_index con rename_axis per rinominare l’index.

Introdurremo anche come applicare il Multi-Index a un dato DataFrame con più livelli di indici.

df.index per aggiungere un indice come nuova colonna

Il modo più semplice per aggiungere index come colonna è aggiungere df.index come nuova colonna a DataFrame.

Codici di esempio:

# python 3.x
import pandas as pd

df = pd.DataFrame(
    [(1, 2, None), (None, 4, None), (5, None, 7), (5, None, None)],
    columns=["a", "b", "d"],
)
df["index"] = df.index
print(df)

Produzione:

     a    b    d  index1
0  1.0  2.0  NaN       0
1  NaN  4.0  NaN       1
2  5.0  NaN  7.0       2
3  5.0  NaN  NaN       3

reset_index Con rename_axis per rinominare il nome della colonna dell’indice corrente

Possiamo cambiare il nome del nostro index, quindi utilizzare reset_index in una serie:

# python 3.x
import pandas as pd

df = pd.DataFrame(
    [(1, 2, None), (None, 4, None), (5, None, 7), (5, None, None)],
    columns=["a", "b", "d"],
)
df = df.rename_axis("index").reset_index()
print(df)

Produzione:

   index    a    b    d
0      0  1.0  2.0  NaN
1      1  NaN  4.0  NaN
2      2  5.0  NaN  7.0
3      3  5.0  NaN  NaN

Metodo set_index per convertire la colonna in indice

Possiamo convertire qualsiasi colonna in index utilizzando il metodo set_index:

# python 3.x
import pandas as pd

df = pd.DataFrame(
    [(1, 2, None), (None, 4, None), (5, 4, 7), (5, 5, None)], columns=["a", "b", "d"]
)
df.set_index("b", inplace=True)
print(df)

Produzione:

     a    d
b          
2  1.0  NaN
4  NaN  NaN
4  5.0  7.0
5  5.0  NaN

Oppure, se vogliamo rimuovere il nome index, come nell’originale, possiamo fare df.index.name = None:

# python 3.x
import pandas as pd

df = pd.DataFrame(
    [(1, 2, None), (None, 4, None), (5, 4, 7), (5, 5, None)], columns=["a", "b", "d"]
)
df.set_index("b", inplace=True)
df.index.name = None
print(df)

Produzione:

     a    d
2  1.0  NaN
4  NaN  NaN
4  5.0  7.0
5  5.0  NaN

MultiIndex per impostare più livelli di indexes su column

Possiamo usare la funzione MultiIndex.from_product() per creare un MultiIndex come segue:

# python 3.x
import pandas as pd
import numpy as np

index = pd.MultiIndex.from_product(
    [["Burger", "Steak", "Sandwich"], ["Half", "Full"]], names=["Item", "Type"]
)
df = pd.DataFrame(
    index=index, data=np.random.randint(0, 10, (6, 4)), columns=list("abcd")
)
print(df)

Produzione:

               a  b  c  d
Item     Type            
Burger   Half  0  3  9  1
         Full  2  2  0  5
Steak    Half  8  4  5  5
         Full  5  8  0  7
Sandwich Half  2  8  9  5
         Full  4  4  5  9

Articolo correlato - Pandas DataFrame