Kursus
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 menggunakanpandas.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 diid_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: JikaTrue(default), membuat indeks berurutan baru. JikaFalse, 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.

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.

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)

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

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

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)

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 denganpandas.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().
|
|
|
|
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.
|
|
|
|
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.
|
|
|
|
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 dalamvalue_varssebagai 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 keid_vars. -
Melelehkan kolom yang tidak diinginkan: Jika Anda mengabaikan
value_vars, pandas akan melelehkan semua kolom yang tidak termasuk dalamid_vars. Ini mungkin termasuk kolom yang tidak ingin Anda ubah bentuknya. Karena itu, selalu tentukanvalue_varssetiap 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_namedanvalue_namealih-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.
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).

