Cursus
Breed formaat is makkelijk te lezen, maar veel analyse- en visualisatietaken werken beter met data in een lang formaat.
De functie pandas.melt() vormt een DataFrame om door een of meer kolommen naar rijen te converteren, terwijl geselecteerde identificatiekolommen ongewijzigd blijven. Zo wordt je data makkelijker te filteren, groeperen, visualiseren en analyseren.
In deze tutorial laat ik je zien hoe je de functie pandas.melt() gebruikt. Ik laat ook zien hoe deze zich verhoudt tot opties als pivot(), stack() en wide_to_long(). Als je net begint met Python, raad ik je aan onze Introduction to Python-cursus te volgen, waarin onderwerpen als datatypes, lijsten, basisfuncties en packages aan bod komen.
Hoe gebruik je pandas.melt()
De functie pandas.melt() zet een DataFrame om van breed naar lang formaat door kolomtitels te transformeren naar waarden in een nieuwe kolom.
De syntax is als volgt:
pandas.melt(
frame,
id_vars=None,
value_vars=None,
var_name=None,
value_name="value",
col_level=None,
ignore_index=True
)
Waarbij:
-
frame: Het DataFrame dat je wilt omvormen. Alleen vereist bij gebruik vanpandas.melt(). -
id_vars: Kolom of lijst met kolommen die ongewijzigd blijven. Deze kolommen identificeren elke rij na het omvormen. -
value_vars: Kolom of lijst met kolommen om te unpivotten. Als dit wordt weggelaten, smelt pandas alle kolommen die niet inid_varsstaan. -
var_name: Naam van de nieuwe kolom die de oorspronkelijke kolomnamen opslaat. Standaard"variable"als niet opgegeven. -
value_name: Naam van de nieuwe kolom die de waarden opslaat. Standaard"value"als niet opgegeven. -
col_level: Optioneel, specificeert welke laag je moet smelten bij werken met MultiIndex-kolommen. -
ignore_index: AlsTrue(standaard) wordt een nieuwe doorlopende index gemaakt. AlsFalse, blijft de oorspronkelijke index behouden.
Ik laat je een voorbeeld zien om te illustreren hoe de bovenstaande syntax data omvormt.
Stel dat je onderstaande dataset hebt, waarin de maandelijkse verkopen per product in aparte kolommen zijn opgeslagen.

Je kunt pandas.melt() gebruiken om de maandkolommen naar rijen om te zetten.
# 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)
Het resulterende DataFrame slaat nu elke maand op als een aparte rij.

Veelvoorkomende voorbeelden met pandas.melt()
Nu je begrijpt hoe de pandas.melt()-syntax werkt, laat ik zien hoe elke parameter zich afzonderlijk gedraagt. We gebruiken de bovenstaande tabel in de volgende voorbeelden.
Geselecteerde kolommen smelten
Met de parameter value_vars kun je aangeven welke kolommen je wilt unpivotten. In plaats van elke maand te smelten, kun je alleen de kolommen omzetten die je nodig hebt.
In dit voorbeeld worden alleen de kolommen January en February gesmolten. De overige maandkolommen worden genegeerd.
# 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)

Identificatiekolommen behouden
Gebruik de parameter id_vars om een of meer kolommen ongewijzigd te laten terwijl de overige kolommen worden omgevormd.
In het onderstaande voorbeeld blijven "Product" en "Category" ongewijzigd, terwijl de maandelijkse verkoopkolommen naar rijen worden omgezet.
# 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()

De uitvoerkolommen hernoemen
Zoals je misschien hebt gezien, heten de uitvoerkolommen standaard variable en value. Gebruik de argumenten var_name en value_name om ze beschrijvende namen te geven.
In het onderstaande voorbeeld hebben we de kolom met variabelen hernoemd naar "Month" en de waarde naar "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()

Oorspronkelijke index behouden
Standaard maakt pandas.melt() een nieuwe doorlopende index. Stel ignore_index=False in om de oorspronkelijke rij-index te behouden.
# 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)

In het bovenstaande voorbeeld worden de oorspronkelijke rijenlabels (0–5) herhaald voor elke maand in plaats van te worden vervangen door een nieuwe doorlopende index.
Wanneer moet je pandas.melt() gebruiken?
pandas.melt() is handig wanneer je data in een breed formaat staat en moet worden omgezet naar een lang formaat voor analyse of visualisatie. Ik vind de functie ook belangrijk voor de volgende use-cases:
-
Brede data omzetten naar lang formaat: Veel datasets slaan gerelateerde waarden op in meerdere kolommen. Hoewel dit formaat makkelijk te lezen is, kan het analyse lastiger maken.
pandas.melt()voegt die kolommen samen in één kolom terwijl identificatiekolommen behouden blijven, wat een schonere structuur oplevert voor verdere verwerking. -
Data voorbereiden voor plotten: Veel plottingbibliotheken, zoals Seaborn, werken het best met data in lang formaat bij het maken van grafieken. In plaats van handmatig meerdere kolommen te combineren, kun je
pandas.melt()gebruiken om de data om te vormen naar het formaat dat deze bibliotheken verwachten. -
Data voorbereiden voor statistische analyse: Veel pandas-bewerkingen, waaronder
groupby(), aggregaties, filteren en samenvattende statistieken, worden eenvoudiger wanneer metingen in één kolom worden opgeslagen in plaats van verspreid over meerdere kolommen. Als je je data metpandas.melt()omvormt, vermindert dat de hoeveelheid code die nodig is om verschillende variabelen te analyseren. -
Tidy datasets maken: Een tidy dataset slaat elke variabele op in een eigen kolom en elke observatie in een eigen rij. Als je dataset herhaalde metingen over meerdere kolommen bevat, is
pandas.melt()vaak de snelste manier om deze om te zetten naar een tidy formaat.
Ik raad je aan onze Introduction to Data Visualization with Seaborn-cursus te volgen om te leren hoe je verschillende plots in Python maakt en aanpast, waaronder scatter-, count-, staaf- en boxplots.
pandas.melt() vs. andere reshapingfuncties
Pandas biedt verschillende functies om data om te vormen, elk met een ander doel. Laten we de verschillen tussen elke methode verkennen.
pandas.melt() vs. pivot()
De tabel hieronder laat het verschil zien tussen de functies pandas.melt() en pivot().
|
|
|
|
Zet brede data om naar lange data. |
Zet lange data om naar brede data. |
|
Zet kolommen om naar rijen. |
Zet rijwaarden om naar kolommen. |
|
Handig om data voor te bereiden voor analyse en visualisatie. |
Handig om data te samenvatten of te presenteren in een rapport. |
Kies daarom melt() wanneer je metingen verspreid zijn over meerdere kolommen, of pivot() wanneer je rijwaarden over kolommen wilt uitspreiden.
pandas.melt() vs. stack()
Hoewel beide functies data omvormen, zo verschillen ze.
|
|
|
|
Vormt reguliere kolommen om naar rijen. |
Verplaatst een of meer kolomniveaus naar de index. |
|
Levert een standaard DataFrame op. |
Levert een Series of DataFrame met een MultiIndex op. |
|
Makkelijker te lezen en te gebruiken voor de meeste analysetaken. |
Beter geschikt voor index-gebaseerde omvormbewerkingen. |
Je kunt stack() gebruiken wanneer je met hiërarchische indexen of MultiIndex-objecten moet werken.
pandas.melt() vs. wide_to_long()
Beide functies zetten brede data om naar lang formaat, maar ze zijn ontworpen voor verschillende situaties, zoals hieronder getoond.
|
|
|
|
Flexibel en werkt met bijna elk DataFrame. |
Ontworpen voor datasets met consistente naamgevingspatronen van kolommen. |
|
Geschikt voor omvormen in het algemeen. |
Ideaal voor herhaalde metingen zoals Sales_2023, Sales_2024 en Sales_2025. |
Als je dataset onregelmatige kolomnamen heeft, gebruik dan melt(). Volgen je kolommen een voorspelbare naamgevingsconventie, gebruik dan wide_to_long() om de data met minder code om te vormen.
Veelgemaakte fouten met pandas.melt()
Hoewel pandas.melt() eenvoudig te gebruiken is, dit zijn de meest voorkomende valkuilen die ik ben tegengekomen en hoe je ze oplost.
-
id_vars vergeten: Als je
id_varsniet opgeeft, behandelt pandas elke kolom die niet invalue_varsstaat als een waardekolom. Dit kan kolommen omvormen die je juist als identificatoren wilde behouden. Om dit op te lossen, identificeer altijd de kolommen die elk record uniek beschrijven en geef ze door aanid_vars. -
Onbedoelde kolommen smelten: Als je
value_varsweglaat, smelt pandas alle kolommen die niet inid_varsstaan. Dit kan kolommen omvatten die je niet wilde omvormen. Geef daarom altijdvalue_varsop wanneer je alleen een subset van kolommen wilt smelten. -
De uitvoervorm verkeerd inschatten: Na het smelten neemt het aantal rijen toe, omdat elke geselecteerde kolom een aparte rij wordt voor elk record. Een DataFrame met 10 rijen en 12 maandkolommen levert bijvoorbeeld 120 rijen op na het smelten van de maandkolommen. Controleer daarom altijd de vorm voor en na het omvormen om te bevestigen dat de data correct is gesmolten.
-
Breed en lang formaat verwarren: Onthoud dat bij een breed formaat vergelijkbare waarden over meerdere kolommen zijn opgeslagen. Bij een lang formaat staan vergelijkbare waarden in één kolom, met een andere kolom die de variabele identificeert.
Best practices voor het gebruik van pandas.melt()
Om je omvormcode makkelijker te begrijpen en te onderhouden, raad ik aan deze best practices te volgen bij het gebruik van de functie pandas.melt():
-
Bepaal eerst de identificatiekolommen: Bepaal welke kolommen ongewijzigd moeten blijven en geef ze vervolgens door aan
id_vars. -
Hernoem de gegenereerde kolom: Gebruik
var_nameenvalue_namein plaats van te vertrouwen op de standaardkolomnamen variable en value. -
Controleer het aantal rijen na het smelten: Verifieer dat het aantal rijen overeenkomt met je verwachtingen, vooral wanneer je veel kolommen smelt.
-
Gebruik pivot() om data terug te vormen: Als je het oorspronkelijke brede formaat na de analyse wilt herstellen, gebruik dan de functie
pivot().
Volg onze Writing Efficient Python Code-cursus om te leren hoe je efficiënte code schrijft die eenvoudig te debuggen en te onderhouden is.
Conclusie
pandas.melt() is de standaard pandas-functie om data in breed formaat om te zetten naar lang formaat. En zodra je de rollen van id_vars en value_vars begrijpt, kun je bepalen welke kolommen als identificatoren blijven en welke naar rijen worden omgezet.
Voor een grondig begrip van Python kun je meer leren in onze skill tracks Python Data Fundamentals en Python Programming Fundamentals.
FAQs
Wanneer moet ik pandas.melt() gebruiken?
Gebruik het wanneer je data herhaalde waarden over kolommen bevat en je een DataFrame in lang formaat wilt voor analyse of visualisatie.
Wat zijn var_name en value_name?
Deze parameters hernoemen de gegenereerde kolommen die de oorspronkelijke kolomnamen en de bijbehorende waarden opslaan.
Wijzigt pandas.melt() het oorspronkelijke DataFrame?
Nee. Het retourneert een nieuw omgevormd DataFrame en laat het origineel ongewijzigd.
Wat is het verschil tussen melt() en pivot()?
melt() zet brede data om naar lang formaat, terwijl pivot() lange data terugzet naar breed formaat.
Wat is het verschil tussen melt() en stack()?
melt() vormt kolommen om naar rijen terwijl het een regulier DataFrame behoudt. stack() verplaatst kolommen naar de index en creëert een hiërarchische (MultiIndex) structuur.

