Impostare e reimpostare l'indice
Promuova una colonna a indice delle righe con set_index(), la ripristini con reset_index() e acquisisca una panoramica di MultiIndex.
Impostare e reimpostare l'indice è una lezione Pandas & NumPy Academy gratuita su CoddyKit. Questa è la lezione 4 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Pandas & NumPy Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Pandas & NumPy Academy include 4 lezioni in totale.
Che cos'è l'indice del DataFrame?
Ogni DataFrame Pandas ha un indice delle righe: un insieme di etichette associate a ogni riga. L'indice predefinito è un RangeIndex (0, 1, 2, …), ma può essere sostituito con qualsiasi colonna che funga da identificatore naturale: una data, un ID prodotto, un ID utente o qualsiasi chiave univoca. Un indice significativo migliora la leggibilità, abilita la selezione basata sulle etichette ed è necessario per il ricampionamento delle serie temporali.
import pandas as pd
df = pd.DataFrame({
'date': ['2024-01-01', '2024-01-02', '2024-01-03'],
'sales': [100, 200, 150]
})
print('Default index:', df.index.tolist()) # [0, 1, 2]
print(df)set_index(): promozione di una colonna
DataFrame.set_index('col') promuove la colonna specificata a indice delle righe, rimuovendola dalle colonne ordinarie. I valori della colonna diventano etichette delle righe. Questo è il modo standard per rendere un DataFrame più espressivo quando una colonna funge da chiave naturale. Viene restituito un nuovo DataFrame; l'originale non cambia, a meno che non si utilizzi inplace=True.
import pandas as pd
df = pd.DataFrame({
'date': ['2024-01-01', '2024-01-02', '2024-01-03'],
'sales': [100, 200, 150]
})
df = df.set_index('date')
print(df)
# sales
# date
# 2024-01-01 100
# 2024-01-02 200
# 2024-01-03 150
print(df.index) # Index(['2024-01-01', ...], dtype='object', name='date')Selezione delle righe con un indice personalizzato
Quando una colonna significativa è l'indice, è possibile usare .loc[label] per recuperare le righe tramite etichetta con una sintassi chiara e leggibile, senza maschere booleane. Per un DatetimeIndex, è anche possibile usare stringhe di date parziali come df.loc['2024-01'] per selezionare tutte le righe di gennaio 2024.
import pandas as pd
df = pd.DataFrame({
'product': ['A', 'B', 'C'],
'price': [10, 20, 30],
'stock': [100, 50, 75]
})
df = df.set_index('product')
# Access row by label
print(df.loc['B'])
# price 20
# stock 50
# Name: B, dtype: int64set_index() con più colonne: MultiIndex
Passare un elenco di nomi di colonne a set_index() crea un MultiIndex (indice gerarchico). È possibile accedere al DataFrame risultante usando tuple in .loc[]. MultiIndex è essenziale per serie temporali raggruppate (regione + data), dati panel (soggetto + tempo) e qualsiasi analisi che richieda un raggruppamento delle righe su due livelli.
import pandas as pd
df = pd.DataFrame({
'region': ['East', 'East', 'West', 'West'],
'year': [2023, 2024, 2023, 2024],
'revenue': [100, 150, 200, 220]
})
df = df.set_index(['region', 'year'])
print(df)
# revenue
# region year
# East 2023 100
# 2024 150
# West 2023 200
# 2024 220
print(df.loc[('East', 2024)]) # revenue = 150Parametro drop= in set_index()
Per impostazione predefinita, set_index('col') rimuove la colonna dalle colonne ordinarie del DataFrame quando questa diventa l'indice. Passi drop=False per mantenere la colonna e usarla contemporaneamente come indice. Questo è talvolta utile quando desidera l'accesso basato sulle etichette, ma ha anche bisogno della colonna per i calcoli nello spazio delle colonne ordinarie.
import pandas as pd
df = pd.DataFrame({'id': [1, 2, 3], 'value': [10, 20, 30]})
# Keep 'id' as both index and column
df_with_both = df.set_index('id', drop=False)
print(df_with_both)
# id value
# id
# 1 1 10
# 2 2 20
# 3 3 30reset_index(): spostamento dell'indice in una colonna
reset_index() è l'inverso di set_index(): sposta l'indice corrente delle righe in una colonna ordinaria e sostituisce l'indice con il RangeIndex predefinito. È comunemente necessario dopo un groupby().agg() o dopo operazioni che lasciano un indice significativo da utilizzare come colonna nelle elaborazioni successive.
import pandas as pd
df = pd.DataFrame({'sales': [100, 200]}, index=['East', 'West'])
df.index.name = 'region'
reset = df.reset_index()
print(reset)
# region sales
# 0 East 100
# 1 West 200
print(reset.index.tolist()) # [0, 1] — default RangeIndex restoredreset_index(drop=True)
Passare drop=True a reset_index() elimina completamente l'indice corrente invece di spostarlo in una colonna. Utilizzi questa opzione quando l'indice corrente non contiene informazioni significative (ad esempio, dopo il filtraggio delle righe, quando presenta interruzioni come 0, 3, 7) e desidera semplicemente un indice sequenziale pulito che inizi da 0.
import pandas as pd
df = pd.DataFrame({'x': [10, 20, 30, 40, 50]})
filtered = df[df['x'] > 15]
print('Filtered index:', filtered.index.tolist()) # [1, 2, 3, 4]
# Drop the old index — don't move it to a column
clean = filtered.reset_index(drop=True)
print('Clean index:', clean.index.tolist()) # [0, 1, 2, 3]reset_index() dopo groupby
Dopo aver chiamato groupby().agg(), le chiavi di raggruppamento diventano l'indice. Chiamando reset_index() le si converte nuovamente in colonne ordinarie, ottenendo un risultato tabellare piatto più semplice da usare, unire o esportare. Questo è uno degli usi più comuni di reset_index() nella pratica.
import pandas as pd
df = pd.DataFrame({
'dept': ['Eng', 'HR', 'Eng', 'Sales', 'HR'],
'salary': [90000, 50000, 80000, 70000, 55000]
})
# After groupby, dept becomes the index
agg = df.groupby('dept')['salary'].mean()
print(type(agg), agg.index.tolist())
# dept is the index
# Reset makes dept a regular column again
result = agg.reset_index()
result.columns = ['dept', 'avg_salary']
print(result)rename_axis() per il nome dell'indice
Quando l'indice delle righe non ha un nome, o quando desidera rinominarlo per maggiore chiarezza, utilizzi df.rename_axis('new_name') (per l'indice delle righe) oppure df.rename_axis('col_name', axis=1) (per l'asse delle colonne). Assegnare un nome significativo all'indice rende l'output più autoesplicativo, soprattutto quando si esporta in CSV, poiché il nome dell'indice diventa un'intestazione di colonna.
import pandas as pd
df = pd.DataFrame({'sales': [100, 200, 300]}, index=['A', 'B', 'C'])
print(df.index.name) # None
# Name the index
df = df.rename_axis('region')
print(df)
# sales
# region
# A 100
# B 200
# C 300Reindicizzazione per colmare le lacune
DataFrame.reindex(new_index) adatta il DataFrame a un nuovo indice, riempiendo con NaN le posizioni presenti nel nuovo indice ma assenti nei dati originali. Questa funzione serve ad allineare i DataFrame a un indice completo comune, ad esempio per assicurarsi che compaia ogni mese dell'anno anche quando per alcuni mesi non esistono dati.
import pandas as pd
df = pd.DataFrame({
'month': ['Jan', 'Mar', 'Jun'],
'revenue': [100, 200, 300]
}).set_index('month')
all_months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun']
complete = df.reindex(all_months)
print(complete)
# revenue
# Jan 100.0
# Feb NaN <- filled with NaN
# Mar 200.0
# Apr NaN
# May NaN
# Jun 300.0reset_index e selezione dei livelli con MultiIndex
Per un DataFrame MultiIndex, per impostazione predefinita reset_index() sposta tutti i livelli nelle colonne. Passi level= per reimpostare solo livelli specifici. Questo è utile quando desidera mantenere un livello come indice (ad esempio, mantenere la data come indice) e spostare l'altro livello in una colonna.
import pandas as pd
df = pd.DataFrame(
{'revenue': [100, 150, 200, 220]},
index=pd.MultiIndex.from_tuples(
[('East', 2023), ('East', 2024), ('West', 2023), ('West', 2024)],
names=['region', 'year']
)
)
# Reset only the 'year' level, keep 'region' as index
df2 = df.reset_index(level='year')
print(df2)
# year revenue
# region
# East 2023 100
# East 2024 150
# West 2023 200
# West 2024 220Verifica rapida
Verifichi la Sua comprensione dell'impostazione e della reimpostazione dell'indice.
Riepilogo della lezione
In questa lezione ha imparato che: set_index('col') promuove una colonna a indice delle righe per l'accesso basato sulle etichette, passare un elenco crea un MultiIndex e reset_index() sposta l'indice in una colonna (utilizzi drop=True per eliminarlo). Utilizzi reindex() per allineare i dati a un indice di destinazione completo, riempiendo con NaN le posizioni mancanti. Queste tecniche sono fondamentali per le lezioni successive su GroupBy e sui merge.
Domande Frequenti
La lezione «Impostare e reimpostare l'indice» è gratuita?
Sì — il testo completo di «Impostare e reimpostare l'indice» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Pandas & NumPy Academy, passa a CoddyKit PRO. Il corso Pandas & NumPy Academy include 4 lezioni in totale.
Cosa imparerò in «Impostare e reimpostare l'indice»?
Promuova una colonna a indice delle righe con set_index(), la ripristini con reset_index() e acquisisca una panoramica di MultiIndex. Eserciti Pandas & NumPy Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Pandas & NumPy Academy?
Non è richiesta alcuna esperienza precedente. Pandas & NumPy Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 4 di 4.
Quanto tempo richiede la lezione «Impostare e reimpostare l'indice»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Pandas & NumPy Academy?
Sì. Ogni lezione Pandas & NumPy Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Ordinare in base ai valori delle colonne
- Ordinare in base all'indice
- Assegnare ranghi ai valori
- Impostare e reimpostare l'indice