Pandas get_dummies: One-Hot Encoding
Blog/Tips & Trik/Pandas get_dummies: One-Hot Encoding

Pandas get_dummies: One-Hot Encoding

BimaBima
·30 Agustus 2026·8 menit baca

Penulis

Bima

Bima

Founder & Data Professional

Bagikan

TL;DR

Pandas get_dummies ngubah kolom kategori jadi beberapa kolom biner 0/1, satu kolom per nilai unik. Teknik ini disebut one-hot encoding dan dipakai supaya data teks bisa masuk ke model machine learning yang cuma nerima angka. Cukup panggil pd.get_dummies(df, columns=['kolom']). Pakai drop_first=True buat buang satu kolom biar nggak redundan, terutama di model regresi.

Pandas get_dummies ngubah kolom kategori jadi kolom-kolom 0/1, satu kolom buat tiap nilai unik. Ini cara paling cepat bikin data teks siap masuk model.

Masalahnya klasik. Model machine learning cuma bisa baca angka. Kolom warna yang isinya 'merah', 'biru', 'hijau' bakal ditolak mentah-mentah.

get_dummies nyelesein ini dalam satu baris. Kamu bakal lihat cara pakainya, opsi penting kayak drop_first, dan satu jebakan yang sering bikin model error pas prediksi data baru.

Apa itu one-hot encoding di pandas?

One-hot encoding adalah cara ngubah satu kolom kategori jadi beberapa kolom biner, di mana tiap kolom mewakili satu nilai. Nilai yang cocok dikasih 1, sisanya 0. Kolom warna dengan tiga nilai unik jadi tiga kolom: warna_merah, warna_biru, warna_hijau. Di pandas, fungsi yang ngerjain ini namanya get_dummies.

Kenapa nggak kasih angka 1, 2, 3 aja ke tiap warna? Soalnya model bakal ngira 3 lebih gede dari 1, padahal warna nggak punya urutan. One-hot ngindarin salah tafsir itu.

Gimana cara pakai get_dummies?

Panggil pd.get_dummies() dan kasih DataFrame plus nama kolom yang mau diubah. Pandas otomatis bikin kolom baru buat tiap nilai unik dan ngisi 0 atau 1. Kolom asli yang diubah bakal diganti sama kolom hasilnya.

import pandas as pd

df = pd.DataFrame({
    'produk': ['beras', 'gula', 'beras', 'minyak'],
    'warna': ['merah', 'biru', 'hijau', 'biru']
})

hasil = pd.get_dummies(df, columns=['warna'])
print(hasil)

Hasilnya, kolom warna ilang, diganti warna_biru, warna_hijau, warna_merah. Baris pertama yang warnanya merah bakal punya nilai 1 di warna_merah dan 0 di dua kolom lain.

Kalau kamu nggak sebut columns, pandas bakal ngubah semua kolom bertipe object atau category. Aman buat data kecil, tapi mending sebut kolomnya biar nggak ada yang keubah nggak sengaja. Buat dasar tipe data kolom, cek fungsi astype di pandas.

Apa fungsi parameter drop_first?

drop_first=True ngebuang kolom pertama dari tiap hasil encoding. Tiga kolom warna jadi dua. Ini bukan buang informasi, soalnya nilai yang kebuang bisa disimpulkan: kalau warna_hijau dan warna_merah dua-duanya 0, berarti warnanya biru.

hasil = pd.get_dummies(df, columns=['warna'], drop_first=True)

Kapan perlu? Di model regresi linear, dua kolom yang saling nyimpulin bikin masalah namanya multikolinearitas. drop_first ngilangin itu. Buat model pohon kayak random forest, drop_first nggak wajib, jadi santai aja.

Gimana biar hasilnya angka 0/1, bukan True/False?

Mulai pandas versi baru, get_dummies default ngasih tipe boolean, jadi isinya True dan False, bukan 1 dan 0. Sebagian besar model tetap nerima, tapi kalau kamu mau angka beneran, atur parameter dtype.

hasil = pd.get_dummies(df, columns=['warna'], dtype=int)

Dengan dtype=int, isinya jadi 0 dan 1. Lebih aman buat operasi aritmetika kayak perkalian bobot atau penjumlahan. Dokumentasi resmi parameter ini ada di dokumentasi pandas get_dummies.

Contoh kasus: encoding kategori produk toko_berkah

Toko_berkah punya data 2.400 transaksi dengan kolom kategori berisi 5 nilai: sembako, minuman, snack, bumbu, rumah_tangga. Aku mau bikin model sederhana buat prediksi apakah transaksi bakal repeat order. Kolom kategori harus diubah dulu jadi angka.

df = pd.read_csv('transaksi_toko_berkah.csv')

df_encoded = pd.get_dummies(
    df,
    columns=['kategori'],
    drop_first=True,
    dtype=int
)

print(df_encoded.shape)  # (2400, 12)

Sebelum encoding, kolom fitur cuma 8. Setelah get_dummies, jadi 12 kolom. Lima kategori menghasilkan empat kolom baru gara-gara drop_first buang satu.

Temuan menarik dari data ini: kategori snack punya proporsi repeat order 34%, paling tinggi di antara semua kategori. Setelah di-encode, kolom kategori_snack jadi salah satu fitur paling berpengaruh di model. Buat agregasi lanjutan, teknik pandas groupby bikin cek proporsi kayak gini gampang.

Kesalahan umum saat pakai get_dummies

Jebakan paling nyebelin: kolom beda antara data latih dan data uji. Kalau data latih punya kategori 'bumbu' tapi data uji nggak ada baris bumbu, hasil encoding-nya beda jumlah kolom. Model langsung error pas prediksi.

Solusinya, samain kolom setelah encoding pakai reindex.

test_encoded = test_encoded.reindex(
    columns=train_encoded.columns,
    fill_value=0
)

Kesalahan kedua: pakai get_dummies buat kolom dengan ratusan nilai unik, kayak nama kota atau ID produk. Hasilnya ratusan kolom dan data jadi berat. Buat kasus itu, mending pakai encoding lain kayak target encoding atau frequency encoding.

Kesalahan ketiga: lupa kalau di pipeline produksi, scikit-learn punya OneHotEncoder yang lebih aman soal konsistensi kolom. get_dummies bagus buat eksplorasi cepat, tapi buat pipeline yang dipakai berulang, OneHotEncoder lebih tahan banting.

FAQ

Apa beda get_dummies dan OneHotEncoder sklearn?

get_dummies gampang dan langsung jalan di DataFrame, cocok buat eksplorasi. OneHotEncoder dari scikit-learn lebih ribet dipakai tapi bisa nyimpen daftar kategori dari data latih, jadi kolom hasilnya konsisten pas ketemu data baru. Buat notebook cepat pakai get_dummies. Buat pipeline produksi yang jalan berulang, pakai OneHotEncoder.

Kapan harus pakai drop_first=True?

Pakai drop_first di model regresi linear atau logistik biar nggak kena multikolinearitas, yaitu kondisi di mana kolom saling nyimpulin dan bikin koefisien nggak stabil. Buat model berbasis pohon kayak random forest atau gradient boosting, drop_first nggak perlu karena model ini nggak terganggu sama kolom redundan.

Kenapa hasil get_dummies isinya True/False, bukan 0/1?

Pandas versi baru default bikin kolom hasil bertipe boolean, jadi isinya True dan False. Kebanyakan model tetap bisa baca ini sebagai 1 dan 0. Kalau kamu butuh angka beneran buat operasi hitung, tambahin parameter dtype=int pas manggil get_dummies. Hasilnya langsung jadi 0 dan 1.

Gimana cara balikin hasil get_dummies ke kolom kategori asli?

Pakai idxmax di sepanjang baris buat nyari kolom mana yang nilainya 1, lalu bersihin prefix-nya. Contohnya df.filter(like='warna_').idxmax(axis=1). Tapi hati-hati kalau kamu pakai drop_first, karena baris yang semua kolomnya 0 mewakili kategori yang kebuang, jadi harus ditangani manual.

Apakah get_dummies bisa buat banyak kolom sekaligus?

Bisa. Kasih daftar nama kolom ke parameter columns, misalnya columns=['warna', 'ukuran']. Pandas bakal one-hot encode semuanya dalam sekali jalan dan bikin kolom terpisah buat tiap nilai di tiap kolom. Prefix otomatis pakai nama kolom asli, jadi warna_merah dan ukuran_besar nggak ketuker.

Penutup

get_dummies bikin kolom kategori siap dipakai model cuma dengan satu baris. Ingat drop_first buat model regresi, dtype=int kalau butuh angka, dan samain kolom train sama test biar prediksi nggak error.

Mau latihan transformasi DataFrame kayak gini tanpa ribet setup? Coba praktek langsung di NgulikSQL dan materi Python-nya.

Lanjut baca: pandas groupby buat agregasi dan pandas astype buat ubah tipe data.

Coba Langsung

Mau praktek langsung? Mulai latihan SQL gratis

Latihan interaktif, langsung di browser.

Buka NgulikSQL →
Bagikan:
Bima
Ditulis oleh

Bima

Founder & Data Professional

Founder Ngulik Data. Passionate about making data analysis accessible for everyone.

Artikel terkait

NumPy reshape: Ubah Bentuk Array (2026)
Tips & Trik
8 Oktober 2026•9 menit baca

NumPy reshape: Ubah Bentuk Array (2026)

Fungsi reshape di NumPy ngatur ulang bentuk array tanpa ngubah datanya. Ini cara pakainya, arti angka -1, dan cara ngeflat array.

BimaBima
NumPy Array: Dasar-Dasar untuk Analis Data (2026)
Tips & Trik
6 Oktober 2026•10 menit baca

NumPy Array: Dasar-Dasar untuk Analis Data (2026)

NumPy array bikin hitungan data di Python jauh lebih cepat dari list biasa. Ini dasar bikin, slicing, dan operasi array buat analis.

BimaBima
Alternatif iterrows yang Lebih Cepat di Pandas
Tips & Trik
3 Oktober 2026•8 menit baca

Alternatif iterrows yang Lebih Cepat di Pandas

iterrows nyaman ditulis tapi lambat. Ini urutan alternatif iterrows di pandas dari yang tercepat, plus benchmark biar kamu tau kapan pakai yang mana.

BimaBima
Kembali ke Blog
Ngulik Data logoNgulik Data

Platform edukasi data lengkap untuk professionals Indonesia. Belajar SQL, Data Analysis, dan lebih banyak lagi dengan praktek langsung dan feedback real-time.

© 2026 Ngulik Data. Semua hak dilindungi.

TAUTAN
BantuanHargaDatasetBlogAfiliasi
LEGAL
Syarat & KetentuanKebijakan Privasi
Ngulik Data
DatasetLeaderboardBlogStore