Mengapa membersihkan data dengan pandas, bukan secara manual?
Membersihkan data di pandas sepadan dengan upayanya karena setiap langkah tercatat dan dapat dijalankan ulang pada hasil ekspor bulan depan dalam hitungan detik, sedangkan perbaikan manual di lembar kerja lambat, mudah terlupakan, dan tidak dapat diaudit.
Bayangkan sebuah grup pusat penjualan tanaman fiktif dengan empat lokasi, Fernhill Gardens. Analis keuangannya, Tomasz, menerima CSV bulanan berisi pesanan daring. Dalam sampel di bawah, pesanan yang sama muncul dua kali, nama lokasi ditulis dengan beberapa cara, nilai uang menyertakan simbol mata uang dan koma, tanggal mencampur format yang diawali hari dan yang diawali tahun, serta nilai yang tidak tersedia ditampilkan sebagai sel kosong, 'N/A', dan '-'. Memperbaikinya secara manual memakan waktu sehari, dan jumlah totalnya tidak pernah benar-benar cocok dengan laporan penyedia layanan pembayaran.
| order_id | site | order_date | amount | postcode |
|---|---|---|---|---|
| 10231 | Leeds | 03/11/2026 | £1,240.00 | LS6 |
| 10231 | Leeds | 03/11/2026 | £1,240.00 | LS6 |
| 10232 | leeds | 2026-11-04 | 86.50 | Tidak berlaku |
| 10233 | YORK | 05/11/2026 | - | YO1 |
| 10234 | Harrogate | 142 |
Bagaimana cara membersihkan data dengan pandas secara bertahap?
Bersihkan data di pandas dengan memuatnya sambil menetapkan penanda nilai yang hilang, memeriksanya, menyeragamkan teks, mengonversi angka dan tanggal, menghapus duplikat, menentukan cara menangani nilai yang masih kosong, lalu memeriksa hasilnya terhadap total yang tepercaya. Melakukan langkah-langkah ini secara berurutan mencegah satu perbaikan membatalkan perbaikan lainnya.
1. Muat data dengan menetapkan penanda nilai yang hilang
Fungsi read_csv pada pandas membaca berkas ke dalam DataFrame. Argumen na_values memungkinkan Anda mencantumkan nilai teks tambahan, seperti 'N/A' dan '-', untuk diperlakukan sebagai data yang hilang, selain nilai bawaan yang sudah dikenali pandas, seperti kolom kosong. Menentukannya di sini membuat Anda tidak perlu mencarinya lagi nanti.
2. Periksa sebelum mengubah apa pun
Lihat baris-baris pertama dengan head, jenis kolom dan jumlah nilai yang tidak kosong dengan info, serta jumlah nilai yang hilang per kolom dengan menggabungkan isna dan sum. Catat temuan Anda: di Fernhill, amount disimpan sebagai teks dan order_date memiliki format yang beragam.
3. Seragamkan teks
Gunakan metode string pada kolom: str.strip menghapus spasi di awal dan akhir, sedangkan str.lower atau str.title menyeragamkan penggunaan huruf besar dan kecil, sehingga ' Leeds', 'leeds ', dan 'LEEDS' menjadi satu lokasi yang sama. Kemudian tampilkan daftar nilai unik dengan unique untuk menemukan variasi ejaan yang masih tersisa.
4. Konversi angka
Hapus simbol mata uang dan koma pemisah ribuan dengan str.replace, lalu konversikan dengan to_numeric. Mengatur argumen errors ke coerce akan mengubah apa pun yang tidak dapat diuraikan menjadi nilai kosong alih-alih menghentikan proses, sehingga Anda dapat menghitung dan meninjau baris tersebut, bukan kehilangannya tanpa diketahui.
5. Konversikan tanggal
to_datetime mengubah teks menjadi tanggal yang valid. Untuk format campuran, tentukan format secara eksplisit jika memungkinkan, atau atur dayfirst untuk tanggal bergaya Inggris, dan atur errors ke coerce agar tanggal yang tidak dapat diurai menjadi NaT, penanda pandas untuk tanggal yang tidak tersedia. Perlu diingat bahwa dayfirst merupakan preferensi, bukan aturan ketat, jadi periksa hasilnya.
6. Hapus duplikat
drop_duplicates menghapus baris yang berulang. Secara bawaan, sebuah baris dianggap duplikat hanya jika setiap kolomnya sama; argumen subset memungkinkan Anda menentukan duplikat berdasarkan kolom tertentu seperti order_id, dan keep menentukan apakah salinan pertama atau terakhir yang dipertahankan.
7. Putuskan cara menangani kekurangan yang tersisa
dropna menghapus baris dengan nilai yang hilang, tetapi secara bawaan baris akan dihapus jika ada kolom mana pun yang nilainya hilang. Gunakan argumen subset untuk hanya menghapus baris yang tidak memiliki nilai yang benar-benar Anda perlukan, seperti amount, atau gunakan fillna untuk mengisi nilai yang hilang dengan nilai yang ditentukan. Kemudian gunakan astype untuk menetapkan tipe akhir kolom, misalnya tipe category untuk site.
Seperti apa tahap pembersihan data yang lemah dan yang telah diperbaiki?
Proses yang lemah memuat berkas dengan read_csv, memanggil dropna tanpa argumen, lalu drop_duplicates tanpa argumen. Karena kode pos sering kosong, dropna menghapus sebagian besar pesanan yang valid, dan karena ' Leeds' dan 'leeds ' masih berbeda, sebagian duplikat tetap ada. Hasil perhitungan pendapatan menjadi jauh terlalu rendah, dan tidak ada yang tahu baris mana yang terhapus.
Proses yang diperbaiki menetapkan 'N/A' dan '-' sebagai nilai kosong saat data dimuat, memangkas spasi di awal dan akhir site serta mengubah huruf awal setiap katanya menjadi kapital, mengonversi amount dengan to_numeric setelah menghapus '£' dan koma, mengonversi order_date dengan dayfirst dan coerce, menghapus duplikat berdasarkan order_id sambil mempertahankan kemunculan pertama, dan hanya menghapus baris yang tidak memiliki amount. Kemudian, proses ini mencetak jumlah baris yang dihapus pada setiap langkah dan membandingkan total pendapatan dengan laporan penyedia pembayaran. Tomasz kini dapat menjelaskan setiap perbedaan.
Bagaimana cara memastikan pembersihan data berhasil?
Periksa pembersihan data dengan menghitung jumlah baris sebelum dan sesudah setiap langkah, membandingkan total utama dengan sumber independen, serta meninjau baris yang nilainya dipaksa menjadi nilai hilang. Jalankan info lagi untuk memastikan tipe kolom dan tampilkan daftar nilai unik untuk kategori seperti lokasi. Jika suatu langkah menghapus lebih banyak baris daripada yang diperkirakan, periksa baris-baris tersebut sebelum melanjutkan.
Bagaimana asisten AI dapat membantu membersihkan data dengan pandas?
Asisten AI dapat menyusun draf langkah pembersihan data jika Anda menjelaskan setiap kolom, masalahnya, dan aturan yang Anda inginkan, serta dapat menjelaskan fungsi yang belum Anda kenal. Jelaskan strukturnya menggunakan nilai contoh buatan, bukan dengan menempelkan data pelanggan asli seperti nama, alamat, atau kode pos lengkap. Mintalah asisten melaporkan jumlah baris setelah setiap langkah, dan cocokkan setiap argumen fungsi yang digunakannya dengan dokumentasi resmi pandas, karena asisten terkadang menyarankan opsi yang tidak ada atau telah berubah antarversi.
Apa saja kesalahan umum saat membersihkan data dengan pandas?
Kesalahan paling umum adalah memanggil dropna tanpa argumen sehingga baris yang sebenarnya baik-baik saja, kecuali pada kolom opsional, ikut hilang. Kesalahan lainnya: menghapus duplikat sebelum menyeragamkan teks, mengonversi tanggal tanpa memeriksa urutan hari dan bulan, menimpa berkas asli, dan tidak pernah membandingkan total setelah pembersihan dengan angka yang tepercaya.
Di bagian mana pelajaran ini berada di Tosheo.ai?
Ini adalah pelajaran pemrograman dalam kategori Sains Data dan Analitik pada kursus sains data. Setiap bidang pelajaran Tosheo.ai dimulai dengan konsep dan praktik tanpa pemrograman, sedangkan pelajaran pemrograman merupakan jalur pendalaman opsional: setelah mendaftar, versi praktik lengkap pelajaran ini meminta Anda menulis dan menjalankan setiap langkah pembersihan dalam Python dengan pandas, lalu dinilai berdasarkan panduan penilaian. Jika Anda baru mengenal Python, mulailah dengan kursus Python. Kursus ini membangun keterampilan praktis, bukan pelatihan intensif atau jaminan pekerjaan.
Sumber dan cakupan
Dokumentasi pandas: read_csv (diperiksa 19 October 2026) ↗
Panduan pengguna pandas: menangani data yang hilang (diperiksa 19 October 2026) ↗
Dokumentasi pandas: DataFrame.dropna (diperiksa 19 October 2026) ↗
Dokumentasi pandas: DataFrame.drop_duplicates (diperiksa 19 October 2026) ↗
Dokumentasi pandas: DataFrame.astype (diperiksa 19 October 2026) ↗
Dokumentasi pandas: to_numeric (diperiksa 19 October 2026) ↗
Dokumentasi pandas: to_datetime (diperiksa 19 October 2026) ↗
Dokumentasi pandas: Series.str.strip (diperiksa 19 October 2026) ↗