course
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änderpandas.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 iid_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: OmTrue(standard) skapas ett nytt sekventiellt index. OmFalsebevaras 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.

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.

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)

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

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

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)

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 medpandas.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().
|
|
|
|
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.
|
|
|
|
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.
|
|
|
|
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_varsbehandlar pandas varje kolumn som inte listas ivalue_varssom 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 tillid_vars. -
Smälter oavsiktliga kolumner: Om du utelämnar
value_varssmälter pandas alla kolumner som inte ingår iid_vars. Detta kan inkludera kolumner som du inte avsåg att omforma. Ange därför alltidvalue_varsnä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_nameochvalue_nameistä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.