Hoppa till huvudinnehållet

pandas melt(): Det bästa sättet att konvertera bred data till lång

Lär dig hur du använder pandas.melt() för att omforma DataFrames från brett till långt format, med praktiska exempel och vanliga användningsfall.
Uppdaterad 4 aug. 2026  · 8 min läsa

Utforska med AI

Öppna i ChatGPTÖppna i ClaudeÖppna i Perplexity

Brett format är lätt att läsa, men många analys- och visualiseringsuppgifter fungerar bättre med data i långt format.

Funktionen pandas.melt() omformar en DataFrame genom att göra om en eller flera kolumner till rader samtidigt som utvalda identifierarkolumner lämnas oförändrade. Det gör din data enklare att filtrera, gruppera, visualisera och analysera.

I den här guiden visar jag hur du använder funktionen pandas.melt(). Jag visar också hur den står sig mot alternativ som pivot(), stack() och wide_to_long(). Om du precis har börjat med Python rekommenderar jag vår Introduction to Python-kurs, som tar upp färdigheter som datatyper, listor, grundläggande funktioner och paket.

Hur du använder pandas.melt()

Funktionen pandas.melt() konverterar en DataFrame från brett till långt format genom att göra om kolumnrubriker till värden i en ny kolumn.

Dess syntax är följande:

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

Där:

  • frame: DataFrame:en som ska omformas. Krävs endast när du använder pandas.melt().

  • id_vars: Kolumn eller lista med kolumner som ska lämnas oförändrade. Dessa kolumner identifierar varje rad efter omformningen.

  • value_vars: Kolumn eller lista med kolumner som ska “unpivotas”. Om det utelämnas smälter pandas alla kolumner som inte finns i id_vars.

  • var_name: Namn på den nya kolumn som lagrar de ursprungliga kolumnnamnen. Standard är ”variable” om inget anges.

  • value_name: Namn på den nya kolumn som lagrar värdena. Standard är ”value” om inget anges.

  • col_level: Valfritt, anger vilken nivå som ska smältas när du arbetar med MultiIndex-kolumner.

  • ignore_index: Om True (standard) skapas ett nytt sekventiellt index. Om False bevaras det ursprungliga indexet.

Låt mig visa ett exempel som illustrerar hur syntaxen ovan omformar data.

Anta att du har datasetet nedan, där de månatliga försäljningstalen för varje produkt ligger i separata kolumner.

Ett exempel på DataFrame i brett format.

Du kan använda pandas.melt() för att konvertera månadskolumnerna till rader.

# 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)

Den resulterande DataFrame:en lagrar nu varje månad som en separat rad.

DataFrame konverterad till långt format med pandas.melt()

Vanliga exempel med pandas.melt()

Nu när du har förstått hur pandas.melt()-syntaxen fungerar visar jag hur varje parameter beter sig var för sig. Vi kommer att använda tabellen ovan i följande exempel. 

Smält valda kolumner

Parametern value_vars låter dig ange vilka kolumner som ska unpivotas. Istället för att smälta varje månad kan du konvertera bara de kolumner du behöver.

I det här exemplet smälts endast kolumnerna January och February. De återstående månadskolumnerna ignoreras.

# 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)

Smält valda kolumner med pandas.melt()

Behåll identifierarkolumner

Använd parametern id_vars för att behålla en eller flera kolumner oförändrade medan de återstående kolumnerna omformas.

I exemplet nedan förblir ”Product” och ”Category” oförändrade, medan de månatliga försäljningskolumnerna konverteras till rader.

# 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()

Behåll identifierarkolumner med funktionen pandas.melt().

Byt namn på utgångskolumnerna

Som du kanske har märkt heter utgångskolumnerna som standard variable och value. Använd argumenten var_name och value_name för att ge dem beskrivande namn.

Till exempel har vi bytt namn på variabelkolumnen till ”Month” och värdet till ”Sales” i utdata nedan.

# 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()

Byt namn på utgångskolumnerna med var_name och value_name i funktionen pandas.melt().

Bevara ursprungligt index

Som standard skapar pandas.melt() ett nytt sekventiellt index. Sätt ignore_index=False för att behålla det ursprungliga radindexet.

# 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)

Använd ignore_index=False för att bevara ursprungligt index i funktionen pandas.melt().

I exemplet ovan upprepas de ursprungliga radetiketterna (0–5) för varje månad istället för att ersättas med ett nytt sekventiellt index.

När ska du använda pandas.melt()?

pandas.melt() är användbart när din data är i brett format och behöver göras om till långt format för analys eller visualisering. Jag tycker också att funktionen är viktig för följande användningsfall:

  • Konvertera bred data till långt format: Många dataset lagrar relaterade värden över flera kolumner. Även om detta format är lätt att läsa kan det försvåra analysen. pandas.melt() kombinerar dessa kolumner till en enda kolumn samtidigt som identifierarkolumner bevaras, vilket skapar en renare struktur för vidare bearbetning.

  • Förbered data för visualisering: Många bibliotek för visualisering, till exempel Seaborn, fungerar bäst med data i långt format när diagram skapas. Istället för att manuellt kombinera flera kolumner kan du använda pandas.melt() för att omforma datan till det format dessa bibliotek förväntar sig.

  • Förbered data för statistisk analys: Många pandas-operationer, inklusive groupby(), aggregationer, filtrering och sammanfattande statistik, blir enklare när mätvärden lagras i en enda kolumn istället för spridda över flera kolumner. Om du omformar din data med pandas.melt() minskar det mängden kod som behövs för att analysera olika variabler.

  • Skapa “tidy” dataset: Ett “tidy” dataset lagrar varje variabel i sin egen kolumn och varje observation i sin egen rad. Om ditt dataset innehåller upprepade mätningar över flera kolumner är pandas.melt() ofta det snabbaste sättet att konvertera det till ett “tidy”-format.

Jag rekommenderar vår Introduction to Data Visualization with Seaborn-kurs för att lära dig skapa och anpassa olika diagram i Python, inklusive scatter-, count-, stapel- och box-diagram.

pandas.melt() jämfört med andra omformningsfunktioner

Pandas erbjuder flera funktioner för att omforma data, som alla fyller olika syften. Låt oss titta på skillnaderna mellan varje metod.

pandas.melt() vs. pivot()

Tabellen nedan visar skillnaden mellan funktionerna pandas.melt() och pivot().

melt()

pivot()

Konverterar bred data till lång data.

Konverterar lång data till brett format. 

Gör om kolumner till rader. 

Gör om radvärden till kolumner.

Användbart för att förbereda data för analys och visualisering.

Användbart för att sammanfatta eller presentera data i en rapport.

Därför bör du välja melt() när dina mätvärden är spridda över flera kolumner, eller pivot() när du vill sprida radvärden över kolumner.

pandas.melt() vs. stack()

Även om båda funktionerna omformar data skiljer de sig åt så här.

melt()

stack()

Omformar vanliga kolumner till rader.

Flyttar en eller flera kolumnnivåer till indexet. 

Ger en vanlig DataFrame. 

Ger en Series eller DataFrame med MultiIndex. 

Lättare att läsa och använda för de flesta analysuppgifter.

Bättre lämpad för indexbaserade omformningsoperationer.

Du kan använda stack() när du behöver arbeta med hierarkiska index eller MultiIndex-objekt.

pandas.melt() vs. wide_to_long()

Båda funktionerna konverterar bred data till långt format, men de är utformade för olika situationer, som visas nedan.

melt()

wide_to_long()

Flexibel och fungerar med i stort sett alla DataFrames.

Utformad för dataset med konsekventa namngivningsmönster för kolumner.  

Lämplig för omformning i allmänhet.  

Idealisk för upprepade mätningar som Sales_2023, Sales_2024 och Sales_2025.

Om ditt dataset har oregelbundna kolumnnamn, använd melt(). Om dina kolumner följer en förutsägbar namngivningskonvention, använd wide_to_long() för att omforma datan med mindre kod.

Vanliga misstag med pandas.melt()

Även om pandas.melt() är enkel att använda är detta de vanligaste fallgroparna jag har stött på och hur du kan åtgärda dem.

  • Glömmer id_vars: Om du inte anger id_vars behandlar pandas varje kolumn som inte listas i value_vars som en värdekolumn. Detta kan omforma kolumner som du avsåg att behålla som identifierare. För att fixa detta, identifiera alltid kolumnerna som unikt beskriver varje post och skicka dem till id_vars.

  • Smälter oavsiktliga kolumner: Om du utelämnar value_vars smälter pandas alla kolumner som inte ingår i id_vars. Detta kan inkludera kolumner som du inte avsåg att omforma. Ange därför alltid value_vars när du bara vill smälta en delmängd av kolumner.

  • Missförstår utdataformatet: Efter smältning ökar antalet rader eftersom varje vald kolumn blir en separat rad för varje post. Till exempel ger en DataFrame med 10 rader och 12 månadskolumner 120 rader efter att månadskolumnerna smälts. Kontrollera därför alltid formen före och efter omformningen för att bekräfta att datan smälts korrekt.

  • Förväxlar brett och långt format: Kom alltid ihåg att i brett format lagras liknande värden över flera kolumner. I långt format lagras liknande värden i en enda kolumn, med en annan kolumn som identifierar variabeln.

Bästa praxis för att använda pandas.melt()

För att göra din omformningskod enklare att förstå och underhålla rekommenderar jag att du följer dessa bästa metoder när du använder funktionen pandas.melt():

  • Identifiera identifierarkolumner först: Bestäm vilka kolumner som ska förbli oförändrade och skicka dem sedan till id_vars.

  • Byt namn på den genererade kolumnen: Använd var_name och value_name istället för att förlita dig på standardnamnen variable och value.

  • Inspektera radantalet efter smältning: Kontrollera att antalet rader motsvarar dina förväntningar, särskilt när många kolumner smälts.

  • Använd pivot() för att omforma tillbaka: Om du behöver återskapa det ursprungliga breda formatet efter analysen, använd funktionen pivot().

Ta vår Writing Efficient Python Code-kurs för att lära dig skriva effektiv kod som är lätt att felsöka och underhålla.

Slutsats

pandas.melt() är standardfunktionen i pandas för att konvertera data i brett format till långt format. Och när du väl förstår rollerna för id_vars och value_vars kan du styra vilka kolumner som förblir identifierare och vilka som konverteras till rader.

För en grundlig förståelse av Python kan du lära dig mer i våra kompetensspår Python Data Fundamentals och Python Programming Fundamentals.

FAQs

När ska jag använda pandas.melt()?

Använd den när din data har upprepade värden spridda över kolumner och du vill ha en DataFrame i långt format för analys eller visualisering.

Vad är var_name och value_name?

Dessa parametrar byter namn på de genererade kolumnerna som lagrar de ursprungliga kolumnnamnen och deras motsvarande värden.

Ändrar pandas.melt() den ursprungliga DataFrame:en?

Nej. Den returnerar en ny omformad DataFrame och lämnar den ursprungliga oförändrad.

Vad är skillnaden mellan melt() och pivot()?

melt() konverterar bred data till långt format, medan pivot() konverterar lång data tillbaka till brett format.

Vad är skillnaden mellan melt() och stack()?

melt() omformar kolumner till rader samtidigt som en vanlig DataFrame behålls. stack() flyttar kolumner till indexet och skapar en hierarkisk (MultiIndex) struktur.

Ämnen

Lär dig pandas med DataCamp

course

Effektiv datainläsning med pandas

4 timmar
63.3K
Lär dig hämta data från vanliga filformat och system som CSV-filer, kalkylblad, JSON, SQL-databaser och API:er.
Se detaljerRight Arrow
Starta Kursen
Se merRight Arrow