Lewati ke konten utama

pandas melt(): Cara Terbaik Mengonversi Data Lebar ke Panjang

Pelajari cara menggunakan pandas.melt() untuk mengubah bentuk DataFrame dari format lebar ke panjang, dengan contoh praktis dan kasus penggunaan umum.
Diperbarui 4 Agu 2026  · 8 mnt baca

Jelajahi dengan AI

Buka di ChatGPTBuka di ClaudeBuka di Perplexity

Format lebar mudah dibaca, tetapi banyak tugas analisis dan visualisasi lebih baik dikerjakan dengan data dalam format panjang.

Fungsi pandas.melt() mengubah bentuk DataFrame dengan mengonversi satu atau lebih kolom menjadi baris sambil mempertahankan kolom pengenal yang dipilih. Ini membuat data Anda lebih mudah untuk difilter, dikelompokkan, divisualisasikan, dan dianalisis.

Dalam tutorial ini, saya akan menunjukkan cara menggunakan fungsi pandas.melt(). Saya juga akan menunjukkan perbandingannya dengan opsi seperti pivot(), stack(), dan wide_to_long(). Jika Anda baru memulai dengan Python, saya menyarankan untuk mengikuti kursus Introduction to Python kami, yang membahas keterampilan seperti tipe data, list, fungsi dasar, dan paket.

Cara Menggunakan pandas.melt()

Fungsi pandas.melt() mengonversi DataFrame dari format lebar ke format panjang dengan mengubah header kolom menjadi nilai pada kolom baru.

Sintaksnya sebagai berikut:

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

Penjelasan:

  • frame: DataFrame yang akan diubah bentuknya. Hanya diperlukan saat menggunakan pandas.melt().

  • id_vars: Kolom atau daftar kolom yang dibiarkan tidak berubah. Kolom-kolom ini mengidentifikasi setiap baris setelah diubah bentuknya.

  • value_vars: Kolom atau daftar kolom yang akan di-unpivot. Jika diabaikan, pandas akan melelehkan semua kolom yang tidak ada di id_vars.

  • var_name: Nama kolom baru yang menyimpan nama kolom asli. Default-nya ”variable” jika tidak ditentukan.

  • value_name: Nama kolom baru yang menyimpan nilai. Default-nya ”value” jika tidak ditentukan.

  • col_level: Opsional, menentukan level mana yang akan dilelehkan saat bekerja dengan kolom MultiIndex.

  • ignore_index: Jika True (default), membuat indeks berurutan baru. Jika False, mempertahankan indeks asli.

Saya akan menunjukkan contoh untuk menggambarkan bagaimana sintaks di atas mengubah bentuk data.

Misalkan Anda memiliki dataset di bawah ini, di mana penjualan bulanan untuk setiap produk disimpan di kolom yang terpisah.

Contoh DataFrame dalam format lebar.

Anda dapat menggunakan pandas.melt() untuk mengonversi kolom bulan menjadi baris.

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

DataFrame yang dihasilkan kini menyimpan setiap bulan sebagai baris terpisah.

DataFrame dikonversi ke format panjang menggunakan pandas.melt()

Contoh Umum pandas.melt()

Sekarang setelah Anda memahami cara kerja sintaks pandas.melt(), saya akan menunjukkan bagaimana setiap parameter berperilaku secara terpisah. Kita akan menggunakan tabel di atas dalam contoh berikut. 

Melelehkan kolom terpilih

Parameter value_vars memungkinkan Anda menentukan kolom mana yang akan di-unpivot. Alih-alih melelehkan setiap bulan, Anda dapat mengonversi hanya kolom yang diperlukan.

Pada contoh ini, hanya kolom Januari dan Februari yang dilelehkan. Kolom bulan lainnya diabaikan.

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

Melelehkan kolom terpilih menggunakan pandas.melt()

Pertahankan kolom pengenal

Gunakan parameter id_vars untuk mempertahankan satu atau lebih kolom tidak berubah sementara kolom lainnya diubah bentuknya.

Pada contoh di bawah, “Product” dan “Category” tetap tidak berubah, sementara kolom penjualan bulanan dikonversi menjadi baris.

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

Pertahankan kolom pengenal menggunakan fungsi pandas.melt().

Ganti nama kolom keluaran

Jika Anda perhatikan, kolom keluaran bernama variable dan value secara default. Gunakan argumen var_name dan value_name untuk memberi nama yang lebih deskriptif.

Sebagai contoh, kami mengganti nama kolom variable menjadi “Month” dan kolom value menjadi “Sales” pada keluaran di bawah.

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

Ganti nama kolom keluaran menggunakan var_name dan value_name dalam fungsi pandas.melt().

Pertahankan indeks asli

Secara default, pandas.melt() membuat indeks berurutan baru. Atur ignore_index=False untuk mempertahankan indeks baris asli.

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

Menggunakan ignore_index=False untuk mempertahankan indeks asli dalam fungsi pandas.melt().

Pada contoh di atas, label baris asli (0–5) diulangi untuk setiap bulan alih-alih diganti dengan indeks berurutan yang baru.

Kapan Sebaiknya Anda Menggunakan pandas.melt()?

pandas.melt() bermanfaat saat data Anda dalam format lebar dan perlu diubah ke format panjang untuk analisis atau visualisasi. Saya juga menganggap fungsi ini penting untuk kasus penggunaan berikut:

  • Mengonversi data lebar ke format panjang: Banyak dataset menyimpan nilai terkait di beberapa kolom. Meskipun format ini mudah dibaca, hal ini dapat mempersulit analisis. pandas.melt() menggabungkan kolom-kolom tersebut menjadi satu kolom sambil mempertahankan kolom pengenal, menciptakan struktur yang lebih rapi untuk pemrosesan lanjutan.

  • Menyiapkan data untuk plotting: Banyak pustaka plotting, seperti Seaborn, bekerja paling baik dengan data format panjang saat membuat bagan. Alih-alih menggabungkan beberapa kolom secara manual, Anda dapat menggunakan pandas.melt() untuk mengubah bentuk data ke format yang diharapkan pustaka tersebut.

  • Menyiapkan data untuk analisis statistik: Banyak operasi pandas, termasuk groupby(), agregasi, penyaringan, dan statistik ringkasan, menjadi lebih sederhana ketika pengukuran disimpan dalam satu kolom alih-alih tersebar di banyak kolom. Jika Anda mengubah bentuk data dengan pandas.melt(), jumlah kode yang diperlukan untuk menganalisis berbagai variabel akan berkurang.

  • Membuat dataset yang rapi (tidy): Dataset yang rapi menyimpan setiap variabel dalam kolomnya sendiri dan setiap observasi dalam barisnya sendiri. Jika dataset Anda berisi pengukuran berulang di beberapa kolom, pandas.melt() sering kali merupakan cara tercepat untuk mengonversinya ke format rapi.

Saya menyarankan untuk mengikuti kursus Introduction to Data Visualization with Seaborn untuk mempelajari cara membuat dan menyesuaikan berbagai plot di Python, termasuk scatter, count, bar, dan box plot.

pandas.melt() vs. Fungsi Pengubah Bentuk Lainnya

Pandas menyediakan beberapa fungsi untuk mengubah bentuk data, masing-masing dengan tujuan berbeda. Mari telusuri perbedaan setiap metode.

pandas.melt() vs. pivot()

Tabel di bawah menunjukkan perbedaan antara fungsi pandas.melt() dan pivot().

melt()

pivot()

Mengonversi data lebar menjadi data panjang.

Mengonversi data panjang menjadi data lebar. 

Mengubah kolom menjadi baris. 

Mengubah nilai baris menjadi kolom.

Berguna untuk menyiapkan data untuk analisis dan visualisasi.

Berguna untuk meringkas atau menyajikan data dalam sebuah laporan.

Karena itu, pilih melt() saat pengukuran tersebar di banyak kolom atau pivot() saat Anda ingin menyebarkan nilai baris ke kolom.

pandas.melt() vs. stack()

Meskipun keduanya mengubah bentuk data, berikut perbedaannya.

melt()

stack()

Mengubah kolom biasa menjadi baris.

Memindahkan satu atau lebih level kolom ke indeks. 

Menghasilkan DataFrame standar. 

Menghasilkan Series atau DataFrame dengan MultiIndex. 

Lebih mudah dibaca dan digunakan untuk sebagian besar tugas analisis.

Lebih cocok untuk operasi pengubahan bentuk berbasis indeks.

Anda dapat menggunakan stack() saat perlu bekerja dengan indeks hierarkis atau objek MultiIndex.

pandas.melt() vs. wide_to_long()

Keduanya mengonversi data lebar ke format panjang, tetapi dirancang untuk situasi yang berbeda, seperti ditunjukkan di bawah.

melt()

wide_to_long()

Fleksibel dan berfungsi dengan hampir semua DataFrame.

Dirancang untuk dataset dengan pola penamaan kolom yang konsisten.  

Cocok untuk pengubahan bentuk serbaguna.  

Ideal untuk pengukuran berulang seperti Sales_2023, Sales_2024, dan Sales_2025.

Jika dataset Anda memiliki nama kolom yang tidak beraturan, gunakan melt(). Jika kolom Anda mengikuti konvensi penamaan yang dapat diprediksi, gunakan wide_to_long() untuk mengubah bentuk data dengan lebih sedikit kode.

Kesalahan Umum dengan pandas.melt()

Meskipun pandas.melt() mudah digunakan, berikut beberapa kesalahan paling umum yang saya temui dan cara memperbaikinya.

  • Lupa menetapkan id_vars: Jika Anda tidak menentukan id_vars, pandas memperlakukan setiap kolom yang tidak tercantum dalam value_vars sebagai kolom nilai. Ini dapat mengubah kolom yang sebenarnya ingin Anda pertahankan sebagai pengenal. Untuk memperbaikinya, selalu identifikasi kolom yang secara unik mendeskripsikan setiap record dan teruskan ke id_vars.

  • Melelehkan kolom yang tidak diinginkan: Jika Anda mengabaikan value_vars, pandas akan melelehkan semua kolom yang tidak termasuk dalam id_vars. Ini mungkin termasuk kolom yang tidak ingin Anda ubah bentuknya. Karena itu, selalu tentukan value_vars setiap kali Anda hanya ingin melelehkan sebagian kolom.

  • Salah paham bentuk keluaran: Setelah dilelehkan, jumlah baris meningkat karena setiap kolom yang dipilih menjadi baris terpisah untuk setiap record. Misalnya, DataFrame dengan 10 baris dan 12 kolom bulan akan menghasilkan 120 baris setelah melelehkan kolom bulan. Karena itu, selalu periksa bentuk sebelum dan sesudah pengubahan untuk memastikan data dilelehkan dengan benar.

  • Bingung antara format lebar dan panjang: Selalu ingat bahwa untuk format lebar, nilai serupa disimpan di banyak kolom. Untuk format panjang, nilai serupa disimpan dalam satu kolom, dengan kolom lain yang mengidentifikasi variabel.

Praktik Terbaik Menggunakan pandas.melt()

Agar kode pengubahan bentuk Anda lebih mudah dipahami dan dipelihara, saya menyarankan mengikuti praktik terbaik berikut saat menggunakan fungsi pandas.melt():

  • Identifikasi kolom pengenal terlebih dahulu: Tentukan kolom mana yang harus tetap tidak berubah, lalu teruskan ke id_vars.

  • Ganti nama kolom yang dihasilkan: Gunakan var_name dan value_name alih-alih mengandalkan nama default variable dan value.

  • Periksa jumlah baris setelah dilelehkan: Verifikasi bahwa jumlah baris sesuai dengan ekspektasi, terutama saat melelehkan banyak kolom.

  • Gunakan pivot() untuk mengubah data kembali: Jika Anda perlu mengembalikan format lebar asli setelah analisis, gunakan fungsi pivot().

Ikuti kursus Writing Efficient Python Code untuk mempelajari cara menulis kode yang efisien, mudah di-debug, dan dipelihara.

Kesimpulan

pandas.melt() adalah fungsi standar pandas untuk mengonversi data berformat lebar menjadi berformat panjang. Dan setelah Anda memahami peran id_vars dan value_vars, Anda dapat mengendalikan kolom mana yang tetap sebagai pengenal dan mana yang dikonversi menjadi baris.

Untuk pemahaman Python yang menyeluruh, Anda dapat mempelajari lebih lanjut dari jalur keterampilan Python Data Fundamentals dan Python Programming Fundamentals kami.


Allan Ouko's photo
Author
Allan Ouko
LinkedIn
Penulis teknis Data Science dengan pengalaman langsung dalam analitik data, business intelligence, dan data science. Saya menulis konten praktis berfokus industri tentang SQL, Python, Power BI, Databricks, dan rekayasa data, yang berakar pada pekerjaan analitik dunia nyata. Tulisan saya menjembatani kedalaman teknis dan dampak bisnis, membantu para profesional mengubah data menjadi keputusan yang meyakinkan.

FAQs

Kapan saya harus menggunakan pandas.melt()?

Gunakan saat data Anda memiliki nilai berulang yang tersebar di banyak kolom, dan Anda menginginkan DataFrame berformat panjang untuk analisis atau visualisasi.

Apa itu var_name dan value_name?

Parameter ini mengganti nama kolom yang dihasilkan yang menyimpan nama kolom asli dan nilai yang sesuai.

Apakah pandas.melt() memodifikasi DataFrame asli?

Tidak. Fungsi ini mengembalikan DataFrame baru yang telah diubah bentuknya dan membiarkan yang asli tetap tidak berubah.

Apa perbedaan antara melt() dan pivot()?

melt() mengonversi data lebar ke format panjang, sedangkan pivot() mengonversi data panjang kembali ke format lebar.

Apa perbedaan antara melt() dan stack()?

melt() mengubah kolom menjadi baris sambil mempertahankan DataFrame biasa. stack() memindahkan kolom ke indeks dan membuat struktur hierarkis (MultiIndex).

Topik

Pelajari pandas bersama DataCamp

Kursus

Pemasukan Data yang Efisien dengan pandas

4 Hr
63.3K
Pelajari cara mengumpulkan data dari format file dan sistem umum seperti file CSV, spreadsheet, JSON, basis data SQL, dan API.
Lihat DetailRight Arrow
Mulai Kursus
Lihat Lebih BanyakRight Arrow
Terkait

blogs

Tutorial Korelasi di R

Dapatkan pengenalan dasar-dasar korelasi di R: pelajari lebih lanjut tentang koefisien korelasi, matriks korelasi, plotting korelasi, dan sebagainya.
David Woods's photo

David Woods

13 mnt

blogs

Spaghetti Plot dan Jalur Badai

Temukan alasan mengapa Anda sebaiknya (tidak) menggunakan spaghetti plot untuk menyampaikan ketidakpastian jalur prediksi badai serta dampaknya terhadap interpretasi.
Hugo Bowne-Anderson's photo

Hugo Bowne-Anderson

13 mnt

blogs

40 Pertanyaan Wawancara DBMS Teratas di 2026

Kuasai pertanyaan wawancara basis data, dari konsep SQL dasar hingga skenario desain sistem tingkat lanjut. Panduan mendalam ini mencakup semua yang Anda perlukan untuk sukses di wawancara DBMS dan meraih peran berikutnya.
Dario Radečić's photo

Dario Radečić

15 mnt

blogs

12 Alternatif ChatGPT Terbaik yang Bisa Anda Coba pada 2026

Artikel ini menyajikan daftar alternatif ChatGPT yang akan meningkatkan produktivitas Anda.
Javier Canales Luna's photo

Javier Canales Luna

14 mnt

Lihat Lebih BanyakLihat Lebih Banyak