0Pricing
Pandas & NumPy Academy · Lezione

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: int64

set_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 = 150

Parametro 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     30

reset_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 restored

reset_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         300

Reindicizzazione 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.0

reset_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      220

Verifica 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

  1. Ordinare in base ai valori delle colonne
  2. Ordinare in base all'indice
  3. Assegnare ranghi ai valori
  4. Impostare e reimpostare l'indice
← Torna a Pandas & NumPy Academy