Kurs
Breit formatierte Daten sind gut lesbar, doch viele Analyse- und Visualisierungsaufgaben funktionieren im langen Format deutlich besser.
Die Funktion pandas.melt() formt einen DataFrame um, indem sie eine oder mehrere Spalten in Zeilen überführt und ausgewählte Identifikatorspalten unverändert lässt. So lassen sich Daten leichter filtern, gruppieren, visualisieren und analysieren.
In diesem Tutorial zeige ich dir, wie du die Funktion pandas.melt() nutzt. Außerdem vergleiche ich sie mit Alternativen wie pivot(), stack() und wide_to_long(). Wenn du gerade mit Python startest, empfehle ich den Introduction to Python-Kurs, der Themen wie Datentypen, Listen, Basisfunktionen und Pakete abdeckt.
So verwendest du pandas.melt()
Die Funktion pandas.melt() konvertiert einen DataFrame vom breiten ins lange Format, indem sie Spaltenüberschriften in Werte einer neuen Spalte verwandelt.
Die Syntax sieht so aus:
pandas.melt(
frame,
id_vars=None,
value_vars=None,
var_name=None,
value_name="value",
col_level=None,
ignore_index=True
)
Dabei gilt:
-
frame: Der umzuformende DataFrame. Nur nötig bei Verwendung vonpandas.melt(). -
id_vars: Spalte oder Liste von Spalten, die unverändert bleiben. Diese Spalten identifizieren jede Zeile nach dem Umformen. -
value_vars: Spalte oder Liste von Spalten, die „entpivotiert“ werden. Wenn weggelassen, schmilzt pandas alle Spalten, die nicht inid_varsstehen. -
var_name: Name der neuen Spalte, die die ursprünglichen Spaltennamen speichert. Standard ist„variable“, falls nicht angegeben. -
value_name: Name der neuen Spalte, die die Werte speichert. Standard ist„value“, falls nicht angegeben. -
col_level: Optional. Gibt an, welche Ebene geschmolzen werden soll, wenn mit MultiIndex-Spalten gearbeitet wird. -
ignore_index: WennTrue(Standard), wird ein neuer fortlaufender Index erstellt. BeiFalsebleibt der ursprüngliche Index erhalten.
Ich zeige dir ein Beispiel, das verdeutlicht, wie die obige Syntax Daten umformt.
Angenommen, du hast den folgenden Datensatz, in dem die monatlichen Verkäufe je Produkt in separaten Spalten gespeichert sind.

Mit pandas.melt() kannst du die Monats-Spalten in Zeilen umwandeln.
# 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)
Der resultierende DataFrame speichert nun jeden Monat als eigene Zeile.

Häufige Beispiele für pandas.melt()
Nachdem du die pandas.melt()-Syntax verstanden hast, zeige ich dir, wie sich die einzelnen Parameter verhalten. In den folgenden Beispielen nutzen wir die oben gezeigte Tabelle.
Ausgewählte Spalten schmelzen
Mit dem Parameter value_vars gibst du an, welche Spalten entpivotiert werden sollen. Anstatt jeden Monat zu schmelzen, kannst du nur die benötigten Spalten umwandeln.
In diesem Beispiel werden nur die Spalten January und February geschmolzen. Die übrigen Monats-Spalten bleiben unberührt.
# 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)

Identifikatorspalten beibehalten
Nutze den Parameter id_vars, um eine oder mehrere Spalten unverändert zu lassen, während die übrigen Spalten umgeformt werden.
Im folgenden Beispiel bleiben „Product“ und „Category“ unverändert, während die monatlichen Verkaufsspalten in Zeilen überführt werden.
# 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()

Ausgabespalten umbenennen
Wie du sicher gesehen hast, heißen die Ausgabespalten standardmäßig variable und value. Mit den Argumenten var_name und value_name gibst du ihnen sprechende Namen.
Im folgenden Output haben wir die Spalte für die Variable in „Month“ und die Werte in „Sales“ umbenannt.
# 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()

Originalindex beibehalten
Standardmäßig erstellt pandas.melt() einen neuen fortlaufenden Index. Setze ignore_index=False, um den ursprünglichen Zeilenindex zu behalten.
# 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)

Im obigen Beispiel werden die ursprünglichen Zeilenlabels (0–5) für jeden Monat wiederholt, statt durch einen neuen Index ersetzt zu werden.
Wann solltest du pandas.melt() verwenden?
pandas.melt() ist nützlich, wenn deine Daten im breiten Format vorliegen und für Analyse oder Visualisierung ins lange Format überführt werden müssen. Außerdem finde ich die Funktion in folgenden Fällen besonders hilfreich:
-
Breite Daten ins lange Format umwandeln: Viele Datensätze verteilen zusammengehörige Werte auf mehrere Spalten. Das ist zwar gut lesbar, erschwert aber die Analyse.
pandas.melt()fasst diese Spalten zu einer Spalte zusammen und behält Identifikatorspalten bei – eine sauberere Struktur für die Weiterverarbeitung. -
Daten fürs Plotten vorbereiten: Viele Plot-Bibliotheken wie Seaborn arbeiten beim Erstellen von Diagrammen am besten mit langformigen Daten. Statt mehrere Spalten manuell zu kombinieren, formst du die Daten mit
pandas.melt()in das erwartete Format um. -
Daten für statistische Analysen vorbereiten: Viele pandas-Operationen wie
groupby(), Aggregationen, Filter und Kennzahlen werden einfacher, wenn Messwerte in einer einzigen Spalte statt über viele Spalten verteilt vorliegen. Mitpandas.melt()reduzierst du den Codeaufwand, um verschiedene Variablen zu analysieren. -
Tidy-Datasets erstellen: Ein tidy Datensatz speichert jede Variable in einer eigenen Spalte und jede Beobachtung in einer eigenen Zeile. Wenn dein Datensatz wiederholte Messungen über mehrere Spalten enthält, ist
pandas.melt()oft der schnellste Weg ins tidy Format.
Ich empfehle dir unseren Introduction to Data Visualization with Seaborn-Kurs, um in Python verschiedene Diagramme zu erstellen und anzupassen – darunter Scatter-, Count-, Balken- und Boxplots.
pandas.melt() im Vergleich zu anderen Umform-Funktionen
Pandas bietet mehrere Funktionen zum Umformen von Daten, die jeweils einem anderen Zweck dienen. Schauen wir uns die Unterschiede an.
pandas.melt() vs. pivot()
Die Tabelle unten zeigt den Unterschied zwischen den Funktionen pandas.melt() und pivot().
|
|
|
|
Wandelt breite Daten in lange Daten um. |
Wandelt lange Daten zurück ins breite Format. |
|
Macht aus Spalten Zeilen. |
Macht aus Zeilenwerten Spalten. |
|
Hilfreich zur Vorbereitung für Analyse und Visualisierung. |
Hilfreich zum Zusammenfassen oder Präsentieren von Daten in Berichten. |
Wähle also melt(), wenn Messwerte über mehrere Spalten verteilt sind, oder pivot(), wenn du Zeilenwerte über Spalten verteilen möchtest.
pandas.melt() vs. stack()
Beide Funktionen formen Daten um, unterscheiden sich jedoch wie folgt.
|
|
|
|
Formt „normale“ Spalten in Zeilen um. |
Verschiebt eine oder mehrere Spaltenebenen in den Index. |
|
Erzeugt einen normalen DataFrame. |
Erzeugt eine Series oder einen DataFrame mit MultiIndex. |
|
Für die meisten Analyseaufgaben leichter lesbar und nutzbar. |
Besser geeignet für indexbasierte Umformungen. |
Du kannst stack() verwenden, wenn du mit hierarchischen Indizes oder MultiIndex-Objekten arbeitest.
pandas.melt() vs. wide_to_long()
Beide Funktionen konvertieren breite Daten ins lange Format, aber sie sind für unterschiedliche Situationen gedacht, wie unten gezeigt.
|
|
|
|
Flexibel und funktioniert mit nahezu jedem DataFrame. |
Ausgelegt für Datensätze mit konsistenten Spaltenbenennungen. |
|
Geeignet für allgemeine Umformungen. |
Ideal für wiederholte Messungen wie Sales_2023, Sales_2024 und Sales_2025. |
Hat dein Datensatz unregelmäßige Spaltennamen, nutze melt(). Folgen deine Spalten einer klaren Namenskonvention, nutze wide_to_long(), um die Daten mit weniger Code umzuformen.
Häufige Fehler mit pandas.melt()
Auch wenn pandas.melt() einfach zu benutzen ist, sind dies die häufigsten Stolperfallen, die ich gesehen habe – und wie du sie vermeidest.
-
id_vars vergessen: Wenn du
id_varsnicht angibst, behandelt pandas jede Spalte, die nicht invalue_varssteht, als Wertespalte. So werden möglicherweise Spalten umgeformt, die eigentlich Identifikatoren bleiben sollten. Lege daher immer die Spalten fest, die jeden Datensatz eindeutig beschreiben, und übergib sie anid_vars. -
Unbeabsichtigtes Schmelzen von Spalten: Wenn du
value_varsweglässt, schmilzt pandas alle Spalten, die nicht inid_varsenthalten sind. Darunter können Spalten sein, die du nicht umformen wolltest. Gib daher immervalue_varsan, wenn du nur eine Teilmenge schmelzen möchtest. -
Ausgabeform falsch eingeschätzt: Nach dem Schmelzen steigt die Zeilenzahl, weil jede ausgewählte Spalte pro Datensatz zu einer separaten Zeile wird. Ein DataFrame mit 10 Zeilen und 12 Monatsspalten erzeugt z. B. 120 Zeilen, wenn die Monatsspalten geschmolzen werden. Prüfe daher vor und nach dem Umformen die Form, um sicherzustellen, dass alles wie geplant lief.
-
Breites und langes Format verwechselt: Merke dir: Im breiten Format sind ähnliche Werte über mehrere Spalten verteilt. Im langen Format stehen ähnliche Werte in einer Spalte, ergänzt um eine weitere Spalte, die die Variable kennzeichnet.
Best Practices für pandas.melt()
Damit dein Umform-Code gut verständlich und wartbar bleibt, empfehle ich bei der Nutzung von pandas.melt() folgende Best Practices:
-
Identifikatorspalten zuerst bestimmen: Lege fest, welche Spalten unverändert bleiben sollen, und übergib sie an
id_vars. -
Generierte Spalten umbenennen: Verwende
var_nameundvalue_name, statt dich auf die Standardnamen variable und value zu verlassen. -
Zeilenzahl nach dem Schmelzen prüfen: Stelle sicher, dass die Anzahl der Zeilen deinen Erwartungen entspricht – besonders, wenn du viele Spalten schmilzt.
-
Mit pivot() zurück ins breite Format: Wenn du nach der Analyse wieder das ursprüngliche breite Format brauchst, nutze die Funktion
pivot().
Mach den Writing Efficient Python Code-Kurs, um zu lernen, wie du effizienten, leicht zu debuggenden und wartbaren Code schreibst.
Fazit
pandas.melt() ist die Standardfunktion in pandas, um Daten vom breiten ins lange Format zu konvertieren. Sobald du die Rollen von id_vars und value_vars verstanden hast, steuerst du, welche Spalten als Identifikatoren bleiben und welche zu Zeilen werden.
Für ein fundiertes Verständnis von Python empfehlen wir dir unsere Skill-Tracks Python Data Fundamentals und Python Programming Fundamentals.
FAQs
Wann sollte ich pandas.melt() verwenden?
Verwende es, wenn deine Daten wiederholte Werte über mehrere Spalten enthalten und du für Analyse oder Visualisierung einen DataFrame im langen Format benötigst.
Wofür stehen var_name und value_name?
Diese Parameter benennen die generierten Spalten um, die die ursprünglichen Spaltennamen bzw. die zugehörigen Werte speichern.
Verändert pandas.melt() den ursprünglichen DataFrame?
Nein. Es wird ein neuer, umgeformter DataFrame zurückgegeben und das Original bleibt unverändert.
Was ist der Unterschied zwischen melt() und pivot()?
melt() wandelt breite Daten ins lange Format um, während pivot() lange Daten zurück ins breite Format bringt.
Was ist der Unterschied zwischen melt() und stack()?
melt() formt Spalten in Zeilen um und behält einen normalen DataFrame bei. stack() verschiebt Spalten in den Index und erzeugt eine hierarchische (MultiIndex-)Struktur.

