Mencari pesanan yang kodenya berawalan TRX atau menyeragamkan penulisan kirim menjadi pengiriman adalah pekerjaan teks yang paling sering muncul saat membersihkan data. pandas menyediakan .str.contains() dan .str.startswith() untuk menguji isi kolom, serta .str.replace() untuk mengganti teks — semuanya bekerja per baris secara vectorized. Chapter ini memakai satu tabel pesanan toko untuk menunjukkan filter baris, penggantian sederhana, dan satu perbedaan default yang penting di pandas 3.0: contains() mengartikan pola sebagai regex, sedangkan replace() mengartikannya sebagai teks literal.
Memfilter Baris dengan startswith dan contains #
import pandas as pd
pesanan = pd.DataFrame({
"kode": ["TRX-001", "TRX-002", "REF-003", "TRX-004"],
"catatan": [
"Pembayaran QRIS",
"kirim ke Bandung",
"Menunggu Transfer",
"kirim ke Jakarta",
],
})
mask = pesanan["kode"].str.startswith("TRX")
print(mask.tolist())
print(pesanan[mask].to_string(index=False))
print(pesanan["catatan"].str.contains("kirim", case=False).tolist())
telepon = pd.Series(["0812-3456-789", "0857-9876-543"])
print(telepon.str.replace("-", "").tolist())
print(pesanan["catatan"].str.replace("kirim", "pengiriman").tolist())
harga = pd.Series(["Rp1.500", "Rp2.000"])
print(harga.str.replace(".", "").tolist())
print(harga.str.replace(".", "", regex=True).tolist())Output yang Dihasilkan:
[True, True, False, True]
kode catatan
TRX-001 Pembayaran QRIS
TRX-002 kirim ke Bandung
TRX-004 kirim ke Jakarta
[False, True, False, True]
['08123456789', '08579876543']
['Pembayaran QRIS', 'pengiriman ke Bandung', 'Menunggu Transfer', 'pengiriman ke Jakarta']
['Rp1500', 'Rp2000']
['', '']Mari kita telaah bagian penting skrip di atas:
- Baris 13-14:
pesanan["kode"].str.startswith("TRX")menghasilkan mask boolean[True, True, False, True];REF-003satu-satunya yang gagal uji. - Baris 15:
pesanan[mask]memakai mask tersebut untuk menyaring baris;to_string(index=False)mencetak hasil tanpa kolom index agar ringkas. - Baris 17:
contains("kirim", case=False)mencari kata di tengah teks tanpa memedulikan huruf besar/kecil; barisMenunggu TransferbernilaiFalsekarena tidak memuat kata tersebut.
Filter boolean seperti baris 15 adalah pola standar: method uji .str menghasilkan mask, lalu mask dipakai di dalam kurung siku DataFrame. Pola yang sama berlaku untuk contains(), endswith(), atau gabungan beberapa mask dengan operator & dan |.
Mengganti Teks dengan replace #
Baris 19-20 menunjukkan penggantian paling umum: telepon.str.replace("-", "") menghapus seluruh tanda hubung pada nomor telepon, sehingga 0812-3456-789 menjadi 08123456789. Argumen kedua adalah penggantinya; tanpa argumen n, pandas mengganti semua kemunculan di tiap baris. Baris 22 menerapkan replace("kirim", "pengiriman") pada kolom catatan dan hanya baris yang memuat kata tersebut yang berubah, sementara Pembayaran QRIS tetap utuh.
| Tugas | Method | Catatan |
|---|---|---|
| Menguji awalan/akhiran | startswith(), endswith() | menghasilkan mask boolean |
| Menguji kata di mana pun | contains(pola, case=False) | case=False mengabaikan kapitalisasi |
| Mengganti semua kemunculan | replace(lama, baru) | berlaku di semua baris yang cocok |
| Menghapus teks | replace(lama, "") | pengganti string kosong |
Default yang Berbeda: contains Regex, replace Literal #
Baris 24-26 menyimpan pelajaran yang paling sering mengejutkan pemula. harga.str.replace(".", "") menghapus titik pada Rp1.500 menjadi Rp1500 karena replace() di pandas 3.0 berperilaku literal secara bawaan — titik dicari sebagai karakter titik, bukan sebagai pola. Namun begitu regex=True ditulis pada baris 26, titik berubah menjadi pola “karakter apa pun” sehingga seluruh isi Rp1.500 dan Rp2.000 terganti menjadi string kosong. Sebaliknya, contains() mengartikan polanya sebagai regex sejak awal, sehingga contains("example.com") akan cocok dengan exampleXcom juga.
| Method | Default | Arti default |
|---|---|---|
.str.contains() | regex=True | pola dibaca sebagai regular expression |
.str.replace() | regex=False | pola dibaca sebagai teks literal |
Dokumentasi resmi yang relevan: pandas.Series.str.contains , pandas.Series.str.replace , dan User Guide: Working with text data .
Method pencarian dan penggantian di atas menerima pola sederhana. Untuk memecah satu kolom menjadi beberapa kolom atau menarik bagian tertentu dari kode seperti PLG-001-BUDI, kita butuh split() dan extract() — topik chapter berikutnya.