Vai al contenuto principale

pandas melt(): il modo migliore per convertire dati in wide in long

Impara a usare pandas.melt() per rimodellare i DataFrame da wide a long, con esempi pratici e casi d’uso comuni.
Aggiornato 4 ago 2026  · 8 min leggi

Esplora con l'AI

Apri in ChatGPTApri in ClaudeApri in Perplexity

Il formato wide è facile da leggere, ma molte attività di analisi e visualizzazione funzionano meglio con dati in formato long.

La funzione pandas.melt() rimodella un DataFrame trasformando una o più colonne in righe mantenendo invariate le colonne identificative selezionate. In questo modo i dati diventano più facili da filtrare, raggruppare, visualizzare e analizzare.

In questo tutorial ti mostrerò come usare la funzione pandas.melt(). Ti farò anche vedere come si confronta con opzioni come pivot(), stack() e wide_to_long(). Se stai iniziando con Python, ti consiglio il nostro Introduction to Python corso, che copre competenze come tipi di dato, liste, funzioni di base e pacchetti.

Come usare pandas.melt()

La funzione pandas.melt() converte un DataFrame dal formato wide al formato long trasformando le intestazioni di colonna in valori in una nuova colonna.

La sua sintassi è la seguente:

pandas.melt(
    frame,
    id_vars=None,
    value_vars=None,
    var_name=None,
    value_name="value",
    col_level=None,
    ignore_index=True
)

Dove:

  • frame: Il DataFrame da rimodellare. Obbligatorio solo quando usi pandas.melt().

  • id_vars: Colonna o elenco di colonne da mantenere invariate. Queste colonne identificano ogni riga dopo il reshaping.

  • value_vars: Colonna o elenco di colonne da “scompattare”. Se omesso, pandas esegue il melt di tutte le colonne che non sono in id_vars.

  • var_name: Nome della nuova colonna che memorizza i nomi delle colonne originali. Se non specificato, il valore predefinito è "variable".

  • value_name: Nome della nuova colonna che memorizza i valori. Se non specificato, il valore predefinito è "value".

  • col_level: Opzionale, specifica quale livello “sciogliere” quando si lavora con colonne MultiIndex.

  • ignore_index: Se True (predefinito), crea un nuovo indice sequenziale. Se False, preserva l’indice originale.

Ti mostro un esempio per illustrare come la sintassi sopra rimodella i dati.

Supponi di avere il dataset qui sotto, in cui le vendite mensili di ciascun prodotto sono memorizzate in colonne separate.

Esempio di DataFrame in formato wide.

Puoi usare pandas.melt() per convertire le colonne dei mesi in righe.

# Convert the DataFrame from wide format to long format
products_sales_2025_melted = products_sales_2025.melt(
    # Keep the Product and Category columns unchanged
    id_vars=["Product", "Category"],

    # Convert the month columns into rows
    value_vars=["January", "February", "March", "April", "May", "June"],

    # Name of the new column that stores the original column names
    var_name="Month",

    # Name of the new column that stores the corresponding sales values
    value_name="Sales"
)

# Display the reshaped DataFrame
products_sales_2025_melted.head(10)

Il DataFrame risultante ora memorizza ogni mese come una riga separata.

DataFrame convertito in formato long con pandas.melt()

Esempi comuni di pandas.melt()

Ora che hai capito come funziona la sintassi di pandas.melt(), ti mostro come si comporta ogni parametro singolarmente. Useremo la tabella sopra nei seguenti esempi. 

Eseguire il melt di colonne selezionate

Il parametro value_vars ti permette di specificare quali colonne scompattare. Invece di eseguire il melt di tutti i mesi, puoi convertire solo le colonne che ti servono.

In questo esempio, solo le colonne January e February vengono “sciolte”. Le restanti colonne dei mesi sono ignorate.

# Convert only the January and February columns into rows
product_sales_3month = products_sales_2025.melt(
    id_vars="Product",
    value_vars=["January", "February",]
)

product_sales_3month.head(20)

Eseguire il melt di colonne selezionate con pandas.melt()

Mantenere le colonne identificative

Usa il parametro id_vars per mantenere invariate una o più colonne mentre le restanti vengono rimodellate.

Nell’esempio seguente, “Product” e “Category” restano invariati, mentre le colonne delle vendite mensili vengono convertite in righe.

# Keep the Product and Category columns while melting the monthly sales
product_sales_cat = products_sales_2025.melt(
    id_vars=["Product", "Category"]
)

product_sales_cat.head()

Mantenere le colonne identificative usando la funzione pandas.melt().

Rinominare le colonne in output

Avrai notato che per impostazione predefinita le colonne in output si chiamano variable e value. Usa gli argomenti var_name e value_name per assegnare nomi descrittivi.

Ad esempio, qui sotto abbiamo rinominato la colonna delle variabili in “Month” e quella dei valori in “Sales”.

# Keep the Product and Category columns while melting the monthly sales
# Rename Month and Sales columns
product_sales_cat = products_sales_2025.melt(
    id_vars=["Product", "Category"],
    var_name="Month",
    value_name="Sales"
)

product_sales_cat.head()

Rinominare le colonne in output usando var_name e value_name nella funzione pandas.melt().

Preservare l’indice originale

Per impostazione predefinita, pandas.melt() crea un nuovo indice sequenziale. Imposta ignore_index=False per mantenere l’indice delle righe originale.

# Keep the original row index after reshaping
product_sales_index = products_sales_2025.melt(
    id_vars=["Product", "Category"],
    var_name="Month",
    value_name="Sales",
    ignore_index=False
)

product_sales_index.head(10)

Uso di ignore_index=False per preservare l’indice originale nella funzione pandas.melt().

Nell’esempio sopra, le etichette di riga originali (0–5) sono ripetute per ogni mese invece di essere sostituite da un nuovo indice sequenziale.

Quando dovresti usare pandas.melt()?

pandas.melt() è utile quando i tuoi dati sono in formato wide e devono essere trasformati in formato long per analisi o visualizzazione. Trovo inoltre la funzione importante per i seguenti casi d’uso:

  • Convertire dati wide in formato long: Molti dataset memorizzano valori correlati su più colonne. Sebbene questo formato sia facile da leggere, può complicare l’analisi. pandas.melt() combina quelle colonne in un’unica colonna preservando le colonne identificative, creando una struttura più pulita per l’elaborazione successiva.

  • Preparare i dati per la grafica: Molte librerie di plotting, come Seaborn, lavorano al meglio con dati in formato long durante la creazione di grafici. Invece di combinare manualmente più colonne, puoi usare pandas.melt() per rimodellare i dati nel formato atteso da queste librerie.

  • Preparare i dati per l’analisi statistica: Molte operazioni di pandas, tra cui groupby(), aggregazioni, filtri e statistiche di riepilogo, diventano più semplici quando le misurazioni sono memorizzate in un’unica colonna invece che distribuite su più colonne. Se rimodelli i tuoi dati con pandas.melt(), riduci la quantità di codice necessaria per analizzare variabili diverse.

  • Creare dataset “tidy”: Un dataset “tidy” memorizza ogni variabile nella propria colonna e ogni osservazione nella propria riga. Se il tuo dataset contiene misurazioni ripetute su più colonne, pandas.melt() è spesso il modo più rapido per convertirlo in un formato ordinato.

Ti consiglio il nostro Introduction to Data Visualization with Seaborn per imparare a creare e personalizzare vari grafici in Python, inclusi scatter, count, bar e box plot.

pandas.melt() vs. altre funzioni di reshaping

Pandas offre diverse funzioni per rimodellare i dati, ciascuna con uno scopo diverso. Vediamo le differenze tra i vari metodi.

pandas.melt() vs. pivot()

La tabella seguente mostra la differenza tra le funzioni pandas.melt() e pivot().

melt()

pivot()

Converte dati wide in dati long.

Converte dati long in dati wide. 

Trasforma colonne in righe. 

Trasforma valori di riga in colonne.

Utile per preparare i dati ad analisi e visualizzazione.

Utile per riepilogare o presentare dati in un report.

Quindi, scegli melt() quando le tue misurazioni sono distribuite su più colonne o pivot() quando vuoi distribuire i valori di riga su colonne.

pandas.melt() vs. stack()

Sebbene entrambe le funzioni rimodellino i dati, ecco come differiscono.

melt()

stack()

Rimodella colonne regolari in righe.

Sposta uno o più livelli di colonna nell’indice. 

Produce un DataFrame standard. 

Produce una Series o un DataFrame con MultiIndex. 

Più facile da leggere e usare per la maggior parte delle attività di analisi.

Più adatto per operazioni di reshaping basate sull’indice.

Puoi usare stack() quando hai bisogno di lavorare con indici gerarchici o oggetti MultiIndex.

pandas.melt() vs. wide_to_long()

Entrambe le funzioni convertono dati wide in formato long, ma sono pensate per situazioni diverse, come mostrato di seguito.

melt()

wide_to_long()

Flessibile e funziona con quasi ogni DataFrame.

Progettata per dataset con schemi di denominazione delle colonne coerenti.  

Adatta a rimodellamenti generici.  

Ideale per misurazioni ripetute come Sales_2023, Sales_2024 e Sales_2025.

Se il tuo dataset ha nomi di colonna irregolari, usa melt(). Se le colonne seguono una convenzione di denominazione prevedibile, usa wide_to_long() per rimodellare i dati con meno codice.

Errori comuni con pandas.melt()

Sebbene pandas.melt() sia semplice da usare, ecco gli errori più comuni che ho riscontrato e come puoi risolverli.

  • Dimenticare id_vars: Se non specifichi id_vars, pandas tratta ogni colonna che non è elencata in value_vars come colonna di valori. Questo può rimodellare colonne che intendevi mantenere come identificatori. Per risolvere, identifica sempre le colonne che descrivono in modo univoco ogni record e passale a id_vars.

  • Eseguire il melt di colonne non volute: Se ometti value_vars, pandas esegue il melt di tutte le colonne non incluse in id_vars. Questo può includere colonne che non intendevi rimodellare. Quindi, specifica sempre value_vars quando vuoi eseguire il melt solo di un sottoinsieme di colonne.

  • Fraintendere la forma dell’output: Dopo il melt, il numero di righe aumenta perché ogni colonna selezionata diventa una riga separata per ogni record. Ad esempio, un DataFrame con 10 righe e 12 colonne di mesi produce 120 righe dopo aver eseguito il melt delle colonne dei mesi. Controlla quindi sempre la forma prima e dopo il reshaping per confermare che i dati siano stati sciolti correttamente.

  • Confondere formato wide e long: Ricorda sempre che nel formato wide valori simili sono memorizzati su più colonne. Nel formato long, valori simili sono memorizzati in un’unica colonna, con un’altra colonna che identifica la variabile.

Best practice per usare pandas.melt()

Per rendere il tuo codice di reshaping più facile da capire e mantenere, ti consiglio di seguire queste best practice quando usi la funzione pandas.melt():

  • Identifica prima le colonne identificative: Decidi quali colonne devono rimanere invariate, poi passale a id_vars.

  • Rinomina la colonna generata: Usa var_name e value_name invece di affidarti ai nomi predefiniti variable e value.

  • Controlla il numero di righe dopo il melt: Verifica che il numero di righe corrisponda alle tue aspettative, soprattutto quando esegui il melt di molte colonne.

  • Usa pivot() per tornare al formato originale: Se devi ripristinare il formato wide originale dopo l’analisi, usa la funzione pivot().

Prova il nostro Writing Efficient Python Code corso per imparare a scrivere codice efficiente, facile da fare debug e da mantenere.

Conclusione

pandas.melt() è la funzione standard di pandas per convertire dati in formato wide in dati in formato long. E una volta compresi i ruoli di id_vars e value_vars, puoi controllare quali colonne restano come identificatori e quali vengono convertite in righe.

Per una comprensione approfondita di Python, puoi scoprire di più nei nostri percorsi di competenze Python Data Fundamentals e Python Programming Fundamentals.


Allan Ouko's photo
Author
Allan Ouko
LinkedIn
Technical writer di Data Science con esperienza pratica in data analytics, business intelligence e data science. Scrivo contenuti pratici e orientati al settore su SQL, Python, Power BI, Databricks e data engineering, basati su lavoro di analytics reale. La mia scrittura unisce profondità tecnica e impatto sul business, aiutando i professionisti a trasformare i dati in decisioni sicure.

FAQs

Quando dovrei usare pandas.melt()?

Usala quando i tuoi dati hanno valori ripetuti distribuiti su più colonne e vuoi un DataFrame in formato long per analisi o visualizzazione.

Cosa sono var_name e value_name?

Questi parametri rinominano le colonne generate che memorizzano i nomi delle colonne originali e i rispettivi valori.

pandas.melt() modifica il DataFrame originale?

No. Restituisce un nuovo DataFrame rimodellato e lascia invariato l’originale.

Qual è la differenza tra melt() e pivot()?

melt() converte dati wide in formato long, mentre pivot() riconverte dati long in formato wide.

Qual è la differenza tra melt() e stack()?

melt() rimodella colonne in righe mantenendo un DataFrame regolare. stack() sposta le colonne nell’indice e crea una struttura gerarchica (MultiIndex).

Argomenti

Impara pandas con DataCamp

Corso

Acquisizione dati semplificata con pandas

4 h
63.3K
Impara a prendere dati da formati di file e sistemi comuni come file CSV, fogli di calcolo, JSON, database SQL e API.
Vedi dettagliRight Arrow
Inizia Il Corso
Mostra altroRight Arrow
Correlato

blog

Tokenizzazione nel NLP: come funziona, sfide e casi d'uso

Guida al preprocessing NLP nel machine learning. Copriamo spaCy, i transformer di Hugging Face e come funziona la tokenizzazione in casi d'uso reali.
Abid Ali Awan's photo

Abid Ali Awan

10 min

blog

Che cos'è Snowflake? Guida per principianti alla piattaforma dati cloud

Esplora le basi di Snowflake, la piattaforma dati cloud. Scopri la sua architettura, le sue funzionalità e come integrarla nelle tue pipeline di dati.
Tim Lu's photo

Tim Lu

12 min

blog

I 15 migliori server MCP remoti che ogni AI builder dovrebbe conoscere nel 2026

Scopri i 15 migliori server MCP remoti che stanno trasformando lo sviluppo AI nel 2026. Scopri come migliorano automazione, ragionamento, sicurezza e velocità dei workflow.
Abid Ali Awan's photo

Abid Ali Awan

15 min

Mostra AltroMostra Altro