0Pricing
Pandas & NumPy Academy · Pelajaran

Mendeteksi dan Menghapus Duplikat

Temukan duplikat persis dan sebagian dengan duplicated() dan drop_duplicates(), lalu tentukan rekaman duplikat yang akan dipertahankan.

Mendeteksi dan Menghapus Duplikat adalah pelajaran Pandas & NumPy Academy gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Pandas & NumPy Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Pandas & NumPy Academy mencakup 4 pelajaran total.

Mengapa Duplikat Penting

Baris duplikat secara diam-diam memperbesar jumlah, total pendapatan, dan rata-rata tanpa pesan kesalahan. Kumpulan data penjualan dengan 500 rekaman pesanan duplikat akan melebihkan pendapatan sebesar jumlah tepat dari 500 pesanan tersebut. Mendeteksi dan menghapus duplikat adalah salah satu langkah pembersihan pertama yang harus Anda lakukan, sebelum agregasi atau pemodelan apa pun, karena kesalahan lanjutan akan terakumulasi dari satu sumber kerusakan ini.

import pandas as pd

df = pd.read_csv('orders.csv')
print('Shape before dedup:', df.shape)
print('Exact duplicates:', df.duplicated().sum())

Menemukan Duplikat yang Persis Sama

df.duplicated() mengembalikan Series boolean yang bernilai True untuk setiap baris yang merupakan salinan persis dari baris sebelumnya. Nilai bawaan keep='first' menandai semua kemunculan selain yang pertama. Dengan meneruskan keep=False, setiap kemunculan duplikat akan ditandai — berguna ketika Anda ingin memeriksa semua salinan rekaman duplikat sebelum menentukan mana yang dipertahankan.

# Mark only the second+ occurrences
partial_dups = df[df.duplicated(keep='first')]
print('Rows to remove:', len(partial_dups))

# Mark ALL copies of any duplicate
all_dups = df[df.duplicated(keep=False)]
print('Rows involved in duplicates:', len(all_dups))

Menghapus Duplikat yang Persis Sama

Hapus baris duplikat yang persis sama dengan df.drop_duplicates(). Secara bawaan, fungsi ini mempertahankan kemunculan pertama dan menghapus semua lainnya. Teruskan keep='last' untuk mempertahankan rekaman terbaru jika data Anda memiliki stempel waktu dan baris berikutnya dianggap lebih tepercaya. Selalu periksa jumlah baris sebelum dan sesudahnya untuk memastikan jumlah baris yang dihapus sesuai harapan.

df_clean = df.drop_duplicates(keep='first')

print('Rows removed:', len(df) - len(df_clean))
print('Shape after dedup:', df_clean.shape)

Duplikat Sebagian: Berdasarkan Kunci

Baris dapat menjadi duplikat sebagian: baris tersebut memiliki kunci bisnis yang sama (seperti order_id), tetapi berbeda pada kolom lain akibat bug di sistem hulu yang membuat dua versi dari catatan yang sama. Gunakan df.duplicated(subset=['order_id']) untuk menemukan baris dengan kunci yang sama tetapi kemungkinan memiliki nilai berbeda pada kolom lain. Periksa baris-baris ini sebelum memutuskan cara merekonsiliasinya.

key_dups = df[df.duplicated(subset=['order_id'], keep=False)]
print('Orders with duplicate IDs:')
print(key_dups.sort_values('order_id').head(10))

Memilih Duplikat yang Dipertahankan

Jika terdapat duplikat sebagian, Anda harus menentukan catatan mana yang menjadi sumber kebenaran. Strategi yang umum adalah mempertahankan baris dengan stempel waktu terbaru (pembaruan paling baru), baris dengan nilai yang tidak kosong paling banyak, atau baris dengan jumlah uang yang lebih besar jika salah satu catatan berisi koreksi. Urutkan berdasarkan kriteria pemecah seri, lalu hapus duplikat dengan mempertahankan kemunculan pertama (atau terakhir).

# Keep the record with the latest update timestamp
df_sorted = df.sort_values('updated_at', ascending=False)
df_dedup = df_sorted.drop_duplicates(subset=['order_id'], keep='first')

print('Kept:', len(df_dedup), 'unique orders')

Deteksi Duplikat yang Hampir Sama

Duplikat yang hampir sama adalah baris yang mewakili entitas yang sama, tetapi sedikit berbeda — misalnya, nama pelanggan yang sama dengan salah ketik, atau transaksi yang sama dengan perbedaan pembulatan 1 sen. Deteksi duplikat persis tidak dapat menemukannya. Salah satu pendekatannya adalah mengelompokkan berdasarkan kolom kunci dan menghitungnya: jika nama pelanggan muncul dengan variasi kecil, gunakan .str.strip().str.lower() untuk menormalkannya sebelum deduplikasi.

df['customer_normalized'] = df['customer_name'].str.strip().str.lower()

near_dups = df.groupby('customer_normalized').size().sort_values(ascending=False)
print(near_dups[near_dups > 1].head())

Deduplikasi dengan Agregasi GroupBy

Jika Anda perlu menggabungkan baris duplikat, bukan sekadar menghapusnya, gunakan groupby().agg(). Misalnya, jika dua baris mewakili pesanan yang sama tetapi salah satunya memiliki alamat pengiriman dan yang lainnya memiliki alamat penagihan, Anda dapat melakukan agregasi dengan 'first' (nilai yang tidak kosong lebih diutamakan) atau fungsi khusus yang menggabungkan nilai tidak kosong di antara duplikat.

def coalesce(*args):
    for a in args:
        if pd.notna(a):
            return a
    return None

df_merged = df.groupby('order_id').agg(
    customer=('customer_name', 'first'),
    amount=('amount', 'max'),
    date=('order_date', 'min')
).reset_index()
print(df_merged.head())

Memeriksa Kepekaan terhadap Urutan Baris

Hasil dari drop_duplicates(keep='first') bergantung pada urutan baris. Jika DataFrame dimuat dari kueri basis data tanpa klausa ORDER BY, urutan baris bersifat nondeterministik, sehingga catatan yang dipertahankan dapat berbeda pada setiap proses. Selalu urutkan berdasarkan kunci yang stabil (misalnya kunci utama atau stempel waktu) sebelum deduplikasi agar prosesnya deterministik dan dapat direproduksi.

# Sort by primary key before deduplication for deterministic results
df = df.sort_values('order_id').reset_index(drop=True)
df_clean = df.drop_duplicates(subset=['order_id'], keep='first')

print('Deterministic dedup complete.')

Memverifikasi Hasil Deduplikasi

Setelah deduplikasi, verifikasi hasilnya dengan tiga pemeriksaan: tidak ada duplikat persis yang tersisa (df_clean.duplicated().sum() == 0), tidak ada kunci bisnis duplikat (df_clean.duplicated(subset=['order_id']).sum() == 0), dan jumlah baris yang diharapkan masih masuk akal. Tuliskan pemeriksaan ini sebagai assertion agar proses gagal secara jelas jika perubahan data di masa mendatang membuat logika pembersihan tidak lagi valid.

assert df_clean.duplicated().sum() == 0, 'Exact duplicates remain'
assert df_clean.duplicated(subset=['order_id']).sum() == 0, 'Duplicate order IDs remain'
print('Deduplication verified. Rows:', len(df_clean))

Mendokumentasikan Duplikat yang Dihapus

Pembersihan data yang baik dapat direproduksi dan diaudit. Catat jumlah baris yang dihapus, kunci deduplikasi, dan aturan pemecah seri ke dalam kamus laporan pembersihan. Simpan laporan ini bersama file data bersih agar siapa pun yang menjalankan pipeline di kemudian hari dapat memverifikasi keputusan pembersihan tanpa membaca ulang kode. Transparansi dalam pembersihan data membangun kepercayaan terhadap hasil analisis.

cleaning_log = {
    'original_rows': len(df),
    'dedup_key': 'order_id',
    'tiebreak': 'keep first by updated_at desc',
    'rows_removed': len(df) - len(df_clean),
    'clean_rows': len(df_clean)
}
for k, v in cleaning_log.items():
    print(f'{k}: {v}')

Menyimpan Dataset yang Telah Diduplikasi

Simpan DataFrame yang telah dideduplikasi ke file baru, bukan menimpa file asli. Dengan demikian, data mentah tetap tersedia untuk audit. Beri nama file secara jelas dengan akhiran _clean atau _deduped, serta sertakan tanggal proses agar beberapa proses pembersihan dapat dibedakan. Gunakan Parquet agar pemuatan ulang pada langkah pipeline berikutnya berlangsung cepat.

from datetime import date

output_path = f'orders_clean_{date.today()}.parquet'
df_clean.to_parquet(output_path, index=False)
print(f'Saved {len(df_clean)} rows to {output_path}')

Pemeriksaan Singkat

Uji pemahaman Anda tentang konsep Analisis Data dari pelajaran ini.

Ringkasan Pelajaran

Dalam pelajaran ini, Anda mempelajari: mendeteksi duplikat persis dan sebagian dengan duplicated() dan drop_duplicates(), memilih duplikat yang dipertahankan menggunakan strategi pengurutan dan agregasi, serta memverifikasi hasil dengan assertion dan mencatat keputusan pembersihan. Selanjutnya, kita akan membahas teknik deteksi dan penanganan pencilan.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Mendeteksi dan Menghapus Duplikat” gratis?

Ya — teks lengkap “Mendeteksi dan Menghapus Duplikat” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Pandas & NumPy Academy, upgrade ke CoddyKit PRO. Kursus Pandas & NumPy Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Mendeteksi dan Menghapus Duplikat”?

Temukan duplikat persis dan sebagian dengan duplicated() dan drop_duplicates(), lalu tentukan rekaman duplikat yang akan dipertahankan. Kamu berlatih Pandas & NumPy Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Pandas & NumPy Academy?

Tidak diperlukan pengalaman sebelumnya. Pandas & NumPy Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.

Berapa lama pelajaran “Mendeteksi dan Menghapus Duplikat” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Pandas & NumPy Academy ini?

Ya. Setiap pelajaran Pandas & NumPy Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Mendeteksi dan Menghapus Duplikat
  2. Deteksi dan Penanganan Pencilan
  3. Menyeragamkan Kategori yang Tidak Konsisten
  4. Validasi Skema dan Pernyataan
← Kembali ke Pandas & NumPy Academy