course
Format szeroki jest czytelny, ale wiele zadań analitycznych i wizualizacyjnych działa lepiej na danych w formacie długim.
Funkcja pandas.melt() zmienia kształt DataFrame’a, zamieniając jedną lub więcej kolumn na wiersze, pozostawiając wybrane kolumny identyfikatorów bez zmian. Dzięki temu dane łatwiej filtrować, grupować, wizualizować i analizować.
W tym samouczku pokażę ci, jak używać funkcji pandas.melt(). Pokażę też, jak wypada w porównaniu z opcjami takimi jak pivot(), stack() i wide_to_long(). Jeśli dopiero zaczynasz z Pythonem, polecam nasz Introduction to Python, który obejmuje m.in. typy danych, listy, podstawowe funkcje i pakiety.
Jak używać pandas.melt()
Funkcja pandas.melt() konwertuje DataFrame z formatu szerokiego na długi, przekształcając nagłówki kolumn w wartości w nowej kolumnie.
Jej składnia wygląda następująco:
pandas.melt(
frame,
id_vars=None,
value_vars=None,
var_name=None,
value_name="value",
col_level=None,
ignore_index=True
)
Gdzie:
-
frame: DataFrame do przekształcenia. Wymagane tylko przy użyciupandas.melt(). -
id_vars: Kolumna lub lista kolumn, które mają pozostać bez zmian. Te kolumny identyfikują każdy wiersz po przekształceniu. -
value_vars: Kolumna lub lista kolumn do „rozbicia” na wiersze. Jeśli pominięte, pandas przekształci wszystkie kolumny, które nie są wid_vars. -
var_name: Nazwa nowej kolumny przechowującej oryginalne nazwy kolumn. Domyślnie„variable”, jeśli nie podano. -
value_name: Nazwa nowej kolumny przechowującej wartości. Domyślnie„value”, jeśli nie podano. -
col_level: Opcjonalnie określa poziom do przekształcenia przy pracy z kolumnami MultiIndex. -
ignore_index: JeśliTrue(domyślnie), tworzony jest nowy sekwencyjny indeks. JeśliFalse, zachowywany jest oryginalny indeks.
Pokażę teraz przykład ilustrujący, jak powyższa składnia zmienia kształt danych.
Załóżmy, że masz poniższy zbiór danych, w którym miesięczna sprzedaż dla każdego produktu jest przechowywana w osobnych kolumnach.

Możesz użyć pandas.melt(), aby przekonwertować kolumny miesięcy na wiersze.
# 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)
Powstały DataFrame przechowuje teraz każdy miesiąc jako oddzielny wiersz.

Częste przykłady użycia pandas.melt()
Skoro rozumiesz już, jak działa składnia pandas.melt(), pokażę ci, jak każdy parametr zachowuje się z osobna. W poniższych przykładach użyjemy powyższej tabeli.
Przekształcanie wybranych kolumn
Parametr value_vars pozwala wskazać, które kolumny rozwinąć do wierszy. Zamiast przekształcać każdy miesiąc, możesz konwertować tylko potrzebne kolumny.
W tym przykładzie przekształcone są tylko kolumny January i February. Pozostałe kolumny miesięcy są ignorowane.
# 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)

Zachowanie kolumn identyfikatorów
Użyj parametru id_vars, aby pozostawić jedną lub więcej kolumn bez zmian, podczas gdy pozostałe kolumny są przekształcane.
W poniższym przykładzie „Product” i „Category” pozostają bez zmian, a miesięczne kolumny sprzedaży są zamieniane na wiersze.
# 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()

Zmiana nazw kolumn wynikowych
Jeśli zauważyłeś, kolumny wyjściowe mają domyślnie nazwy variable i value. Użyj argumentów var_name i value_name, aby nadać im opisowe nazwy.
Na przykład poniżej zmieniliśmy nazwę kolumny zmiennej na „Month”, a wartości na „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()

Zachowanie oryginalnego indeksu
Domyślnie pandas.melt() tworzy nowy sekwencyjny indeks. Ustaw ignore_index=False, aby zachować oryginalny indeks wierszy.
# 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)

W powyższym przykładzie oryginalne etykiety wierszy (0–5) są powtarzane dla każdego miesiąca zamiast zostać zastąpione nowym sekwencyjnym indeksem.
Kiedy używać pandas.melt()?
pandas.melt() przydaje się, gdy twoje dane są w formacie szerokim i trzeba je przekształcić do formatu długiego na potrzeby analizy lub wizualizacji. Uważam też tę funkcję za ważną w następujących przypadkach użycia:
-
Konwersja danych szerokich na format długi: Wiele zbiorów danych przechowuje powiązane wartości w wielu kolumnach. Taki format jest czytelny, ale może utrudniać analizę.
pandas.melt()łączy te kolumny w jedną, zachowując kolumny identyfikatorów i tworząc czystszą strukturę do dalszego przetwarzania. -
Przygotowanie danych do wykresów: Wiele bibliotek do rysowania wykresów, takich jak Seaborn, najlepiej działa na danych w formie długiej. Zamiast ręcznie łączyć wiele kolumn, możesz użyć
pandas.melt(), aby przekształcić dane do oczekiwanego formatu. -
Przygotowanie danych do analizy statystycznej: Wiele operacji w pandas, w tym
groupby(), agregacje, filtrowanie i statystyki podsumowujące, staje się prostsze, gdy pomiary są przechowywane w jednej kolumnie zamiast być rozproszone po wielu kolumnach. Jeśli przekształcisz dane za pomocąpandas.melt(), zmniejszysz ilość kodu potrzebnego do analizy różnych zmiennych. -
Tworzenie „tidy” datasetów: „Tidy” zbiór danych przechowuje każdą zmienną w osobnej kolumnie, a każdą obserwację w osobnym wierszu. Jeśli twój zbiór danych zawiera powtarzające się pomiary w kilku kolumnach,
pandas.melt()jest często najszybszym sposobem na konwersję do formatu „tidy”.
Polecam nasz kurs Introduction to Data Visualization with Seaborn, aby nauczyć się tworzyć i dostosowywać różne wykresy w Pythonie, w tym scatter, count, bar i box ploty.
pandas.melt() a inne funkcje zmiany kształtu danych
Pandas oferuje kilka funkcji do zmiany kształtu danych, z których każda służy innemu celowi. Przyjrzyjmy się różnicom między nimi.
pandas.melt() vs. pivot()
Tabela poniżej pokazuje różnicę między funkcjami pandas.melt() i pivot().
|
|
|
|
Konwertuje dane szerokie na dane długie. |
Konwertuje dane długie na dane szerokie. |
|
Zamienia kolumny na wiersze. |
Zamienia wartości wierszy na kolumny. |
|
Przydatne do przygotowania danych do analizy i wizualizacji. |
Przydatne do podsumowywania lub prezentowania danych w raporcie. |
Dlatego wybieraj melt(), gdy twoje pomiary są rozproszone po wielu kolumnach, a pivot(), gdy chcesz rozłożyć wartości wierszy na kolumny.
pandas.melt() vs. stack()
Chociaż obie funkcje zmieniają kształt danych, oto czym się różnią.
|
|
|
|
Przekształca zwykłe kolumny w wiersze. |
Przenosi jeden lub więcej poziomów kolumn do indeksu. |
|
Zwraca standardowy DataFrame. |
Zwraca Series lub DataFrame z MultiIndexem. |
|
Łatwiejsze do czytania i użycia w większości zadań analitycznych. |
Lepiej nadaje się do operacji zmiany kształtu opartych na indeksie. |
Możesz użyć stack(), gdy potrzebujesz pracować z indeksami hierarchicznymi lub obiektami MultiIndex.
pandas.melt() vs. wide_to_long()
Obie funkcje konwertują dane szerokie na format długi, ale są zaprojektowane do różnych sytuacji, jak pokazano poniżej.
|
|
|
|
Elastyczna i działa z niemal każdym DataFrame’em. |
Zaprojektowana dla zbiorów danych ze spójnymi schematami nazywania kolumn. |
|
Odpowiednia do ogólnych przekształceń. |
Idealna dla powtarzających się pomiarów, takich jak Sales_2023, Sales_2024 i Sales_2025. |
Jeśli twój zbiór danych ma nieregularne nazwy kolumn, użyj melt(). Jeśli kolumny stosują przewidywalną konwencję nazewniczą, użyj wide_to_long(), aby przekształcić dane mniejszą liczbą linijek kodu.
Najczęstsze błędy z pandas.melt()
Chociaż pandas.melt() jest prosta w użyciu, oto najczęstsze pułapki, na które trafiałem, oraz jak je naprawić.
-
Zapominanie o id_vars: Jeśli nie podasz
id_vars, pandas traktuje każdą kolumnę, która nie jest wymieniona wvalue_vars, jako kolumnę wartości. To może przekształcić kolumny, które miały pozostać identyfikatorami. Aby temu zapobiec, zawsze zidentyfikuj kolumny, które jednoznacznie opisują każdy rekord, i przekaż je doid_vars. -
Przekształcanie niezamierzonych kolumn: Jeśli pominiesz
value_vars, pandas przekształci wszystkie kolumny nieujęte wid_vars. To może obejmować kolumny, których nie chciałeś zmieniać. Dlatego zawsze podawajvalue_vars, gdy chcesz przekształcić tylko podzbiór kolumn. -
Niezrozumienie kształtu wyjścia: Po przekształceniu liczba wierszy rośnie, ponieważ każda wybrana kolumna staje się osobnym wierszem dla każdego rekordu. Na przykład DataFrame z 10 wierszami i 12 kolumnami miesięcy daje 120 wierszy po przekształceniu kolumn miesięcy. Dlatego zawsze sprawdzaj kształt przed i po przekształceniu, aby potwierdzić, że dane zostały poprawnie „stopione”.
-
Mylenie formatu szerokiego i długiego: Pamiętaj, że w formacie szerokim podobne wartości są przechowywane w wielu kolumnach. W formacie długim podobne wartości trafiają do jednej kolumny, a inna kolumna identyfikuje zmienną.
Dobre praktyki korzystania z pandas.melt()
Aby twój kod zmieniający kształt danych był łatwiejszy do zrozumienia i utrzymania, polecam stosować te dobre praktyki podczas używania funkcji pandas.melt():
-
Najpierw zidentyfikuj kolumny identyfikatorów: Zdecyduj, które kolumny mają pozostać bez zmian, a następnie przekaż je do
id_vars. -
Zmień nazwy generowanych kolumn: Używaj
var_nameivalue_namezamiast polegać na domyślnych nazwach „variable” i „value”. -
Sprawdź liczbę wierszy po przekształceniu: Zweryfikuj, czy liczba wierszy zgadza się z oczekiwaniami, zwłaszcza gdy przekształcasz wiele kolumn.
-
Użyj pivot(), aby przywrócić pierwotny kształt: Jeśli po analizie musisz odtworzyć oryginalny format szeroki, użyj funkcji
pivot().
Zapisz się na nasz kurs Writing Efficient Python Code, aby nauczyć się pisać wydajny kod, który łatwo debugować i utrzymywać.
Podsumowanie
pandas.melt() to standardowa funkcja pandas do konwersji danych w formacie szerokim na format długi. Gdy zrozumiesz role id_vars i value_vars, możesz kontrolować, które kolumny pozostają identyfikatorami, a które są zamieniane na wiersze.
Aby gruntownie poznać Pythona, skorzystaj z naszych ścieżek umiejętności Python Data Fundamentals i Python Programming Fundamentals.
FAQs
Kiedy powinienem używać pandas.melt()?
Używaj jej, gdy twoje dane mają powtarzające się wartości rozproszone po kolumnach i chcesz DataFrame’a w formacie długim do analizy lub wizualizacji.
Czym są var_name i value_name?
Te parametry zmieniają nazwy generowanych kolumn, które przechowują oryginalne nazwy kolumn i odpowiadające im wartości.
Czy pandas.melt() modyfikuje oryginalny DataFrame?
Nie. Zwraca nowy przekształcony DataFrame i pozostawia oryginał bez zmian.
Jaka jest różnica między melt() a pivot()?
melt() konwertuje dane szerokie na format długi, a pivot() konwertuje dane długie z powrotem na format szeroki.
Jaka jest różnica między melt() a stack()?
melt() przekształca kolumny w wiersze, zachowując zwykły DataFrame. stack() przenosi kolumny do indeksu i tworzy hierarchiczną strukturę (MultiIndex).