Pandas drop_duplicates: Hapus Baris Duplikat (2026)
TL;DR
Pandas drop_duplicates() ngehapus baris kembar di DataFrame dan nyimpen satu salinannya. Secara default dia ngecek semua kolom dan nyimpen kemunculan pertama. Pakai subset biar cuma ngecek kolom kunci kayak id_transaksi, dan keep buat milih nyimpen yang pertama, terakhir, atau buang semua yang kembar. Setelah dibuang, indeksnya jadi bolong, jadi biasanya perlu reset_index. Selalu cek jumlah baris sebelum dan sesudah biar tau berapa yang kebuang.
Pandas drop_duplicates() ngehapus baris kembar di DataFrame dan nyimpen satu salinannya.
Masalah paling sering: versi polosnya ngecek semua kolom. Dua baris yang sebenernya duplikat sering lolos cuma gara-gara satu kolom, misalnya timestamp, beda beberapa detik.
Di tutorial ini kamu bakal belajar pakai subset buat kolom kunci, milih baris mana yang disimpan, dan rapiin indeks setelah menghapus.
Apa itu drop_duplicates di pandas?
drop_duplicates() adalah method DataFrame yang ngebuang baris yang isinya sama. Secara default dia ngebandingin seluruh kolom, dan kalau ada dua baris yang identik di semua kolom, dia nyimpen yang pertama dan buang sisanya. Hasilnya DataFrame baru tanpa baris kembar.
Ini penting buat data yang digabung dari beberapa sumber, di mana transaksi yang sama bisa keinput dua kali. Duplikat bikin total dan hitungan jadi ketinggian.
Gimana cara pakai drop_duplicates dasar?
Mulai dari cek dulu ada berapa baris duplikat sebelum dibuang, pakai duplicated().
import pandas as pd
df = pd.read_csv('toko_berkah.csv')
# Hitung berapa baris duplikat
print(df.duplicated().sum())
# Buang duplikat, simpan yang pertama
df_bersih = df.drop_duplicates()
print(len(df), '->', len(df_bersih))
Baris terakhir itu pengaman. Bandingin jumlah baris sebelum dan sesudah biar kamu tau persis berapa yang kebuang. Konsep menjaga baris tetap unik ini mirip ide primary key di database.
Gimana cara buang duplikat berdasarkan kolom tertentu?
Ini yang paling sering kamu butuhin. Pakai subset biar drop_duplicates cuma ngecek kolom kunci, bukan semua kolom.
# Anggap duplikat kalau id_transaksi sama
df_bersih = df.drop_duplicates(subset=['id_transaksi'])
# Bisa beberapa kolom sebagai kunci gabungan
df_bersih = df.drop_duplicates(subset=['tanggal', 'produk', 'kasir'])
Sekarang dua baris dengan id_transaksi sama dianggap kembar walau kolom timestamp-nya beda. Ini jauh lebih akurat dari drop_duplicates polos buat data transaksi yang punya ID unik.
Apa fungsi argumen keep?
keep nentuin baris mana yang disimpan waktu ada duplikat. Ada tiga pilihan.
| Nilai keep | Efek |
|---|---|
keep='first' | Simpan kemunculan pertama (default) |
keep='last' | Simpan kemunculan terakhir |
keep=False | Buang semua baris yang punya kembaran |
# Simpan versi terakhir, misalnya data terbaru
df_bersih = df.drop_duplicates(subset=['id_transaksi'], keep='last')
# Buang semua baris yang punya duplikat, sisakan yang benar-benar unik
df_unik = df.drop_duplicates(subset=['id_transaksi'], keep=False)
keep='last' berguna kalau baris terbaru itu yang paling update. keep=False berguna buat nyari baris mana aja yang bermasalah, soalnya dia nyisain cuma yang gak punya kembaran.
Kenapa perlu reset_index setelah drop_duplicates?
Setelah baris dibuang, indeksnya jadi bolong. Kalau baris 3 dan 7 kehapus, indeksnya lompat-lompat. Rapiin pakai reset_index.
df_bersih = df.drop_duplicates(subset=['id_transaksi']).reset_index(drop=True)
drop=True penting. Tanpa itu, indeks lama malah disimpan jadi kolom baru. Indeks yang rapi bikin operasi selanjutnya kayak loc dan penggabungan lebih gampang.
Contoh kasus: duplikat gabungan data toko_berkah
Dataset toko_berkah punya Ngulik Data isinya transaksi dari dua kasir yang digabung jadi satu file. Total 8.400 baris.
Gara-gara proses gabung manual, sebagian transaksi keinput dua kali dengan timestamp beda tipis. Kalau aku pakai drop_duplicates polos:
df.drop_duplicates() # sisa 8.400, gak ada yang kebuang
df.drop_duplicates(subset=['id_transaksi']) # sisa 8.164 baris
Versi polos gak nemu satu duplikat pun, soalnya timestamp yang beda bikin tiap baris keliatan unik. Versi subset=['id_transaksi'] nemu 236 duplikat dan buang semuanya.
Efeknya ke total qty terjual lumayan: turun 2,8% setelah dibersihin. Kalau pemiliknya ngambil keputusan stok dari angka kotor, dia over-order 2,8% di tiap produk. Kuncinya cuma satu: pilih kolom kunci yang bener di subset.
Kesalahan umum waktu pakai drop_duplicates
Pakai versi polos di data yang punya kolom timestamp. Timestamp yang beda tipis bikin baris kembar keliatan unik. Selalu pikirin subset dengan kolom kunci.
Lupa hasilnya DataFrame baru. df.drop_duplicates() gak ngubah df asli. Simpan ke variabel: df = df.drop_duplicates(...). Kalau lupa, kamu kira udah bersih padahal belum.
Gak reset_index. Indeks bolong bikin operasi selanjutnya berantakan. Tambahin .reset_index(drop=True).
Salah pilih keep. Kalau baris terbaru yang penting, tapi kamu pakai keep default first, kamu malah nyimpen yang lama. Sesuaikan keep sama urutan datamu.
Gak bedain duplikat asli sama data yang emang berulang. Dua transaksi beda dengan produk sama bukan duplikat. Pastikan kolom kunci di subset beneran nunjukin baris yang sama, bukan cuma mirip.
FAQ
Apa bedanya drop_duplicates sama duplicated?
duplicated() ngasih Series berisi True atau False buat tiap baris, nandain mana yang duplikat, tanpa menghapus apa pun. drop_duplicates() beneran ngebuang baris duplikatnya. Pakai duplicated() dulu buat ngintip dan ngitung berapa duplikat, atau buat lihat baris mana yang kena. Setelah yakin, baru pakai drop_duplicates() buat ngehapus. Keduanya nerima argumen subset dan keep yang sama.
Apakah drop_duplicates mengubah DataFrame asli?
Nggak secara default. Method ini ngembaliin DataFrame baru dan ninggalin yang asli utuh. Buat nyimpen hasilnya, assign ke variabel, misalnya df = df.drop_duplicates(). Versi lama pandas punya inplace=True, tapi cara yang lebih disaranin sekarang adalah assign ulang. Ini bikin kode lebih jelas dan aman dari perubahan yang gak sengaja.
Gimana cara nyimpen baris terbaru waktu ada duplikat?
Urutkan dulu DataFrame berdasarkan kolom waktu, lalu pakai keep dengan nilai yang sesuai. Kalau data diurut dari lama ke baru, pakai keep='last' biar yang terbaru disimpan. Atau urut dari baru ke lama, lalu pakai keep='first'. Yang penting kamu ngatur urutan datanya dulu, soalnya drop_duplicates nyimpen baris berdasarkan posisi, bukan berdasarkan nilai waktu secara otomatis.
Apa bedanya drop_duplicates sama dropna?
drop_duplicates ngebuang baris yang isinya kembar dengan baris lain. dropna ngebuang baris yang punya nilai kosong atau NaN. Dua-duanya buat bersih-bersih data, tapi masalah yang diselesaikan beda. Kalau data kamu punya baris ganda sekaligus banyak sel kosong, biasanya kamu pakai keduanya berurutan. Lihat cara pakai dropna di panduan terpisah buat menangani data kosong.
Kenapa drop_duplicates gak nemu duplikat yang keliatan sama?
Biasanya karena ada kolom yang nilainya beda tipis, kayak timestamp, ID internal, atau spasi tersembunyi di teks. drop_duplicates polos ngecek semua kolom, jadi satu perbedaan kecil bikin baris dianggap unik. Solusinya pakai subset dengan cuma kolom kunci yang beneran nentuin keunikan. Buat teks, bersihin dulu spasi pakai str.strip() biar Bandung dan Bandung dengan spasi gak dianggap beda.
Penutup
drop_duplicates gampang, tapi versi polosnya sering meleset di data yang punya kolom timestamp atau ID internal. Satu perbedaan kecil bikin duplikat lolos.
Aturan amannya: cek dulu pakai duplicated(), pakai subset dengan kolom kunci, pilih keep sesuai urutan data, dan reset_index setelahnya.
Semua argumen drop_duplicates ada di dokumentasi resmi pandas.
Kalau data kamu juga punya sel kosong, lanjut ke pandas dropna. Dan buat ngelompokin data bersih jadi ringkasan, cek pandas groupby. Bersih-bersih semacam ini bagian dari data wrangling.
Mau praktek langsung? Mulai latihan SQL gratis
Latihan interaktif, langsung di browser.
Artikel terkait
Seaborn Pairplot: Cara Eksplorasi Data Cepat dengan Python (2026)
Satu baris kode buat lihat hubungan semua kolom numerik sekaligus. Ini cara pakai seaborn pairplot buat eksplorasi data, lengkap dengan contoh dan cara bacanya.
Seaborn Heatmap: Visualisasi Matriks Korelasi (2026)
Seaborn heatmap ngubah matriks korelasi jadi grid warna, jadi kamu bisa langsung lihat variabel mana yang saling terkait. Ini cara bikinnya dari df.corr() sampai atur warna dan angka.
Seaborn untuk Pemula: Visualisasi Statistik di Python (2026)
Seaborn bikin chart statistik yang rapi cuma dengan satu baris kode. Ini dasar-dasarnya buat pemula, dari histogram sampai heatmap.