Pencocokan Pola dengan Regex
Ekstrak substring dan periksa pola dengan .str.extract(), .str.contains(), dan .str.match() menggunakan ekspresi reguler.
Pencocokan Pola dengan Regex adalah pelajaran Pandas & NumPy Academy gratis di CoddyKit. Ini adalah pelajaran 3 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 Menggunakan Regex di Pandas?
Ekspresi reguler (regex) adalah bahasa untuk mendeskripsikan pola string. Di Pandas, pengakses .str menyediakan regex melalui contains(), match(), extract(), findall(), dan replace(). Regex adalah alat yang tepat ketika pola Anda terlalu kompleks untuk pemeriksaan contains/startswith sederhana — misalnya, memvalidasi format email, mengekstrak nomor telepon dari teks bebas, atau menemukan semua jumlah dolar dalam kolom catatan.
import pandas as pd
df = pd.DataFrame({
'text': ['Order #12345 placed', 'No order', 'Ref #67890 paid', 'Refund for #11111']
})
# Find rows that contain an order number (# followed by 5 digits)
has_order = df['text'].str.contains(r'#\d{5}', regex=True)
print(df[has_order])
# text
# 0 Order #12345 placed
# 2 Ref #67890 paid
# 3 Refund for #11111.str.contains() dengan Regex
.str.contains(pattern) dengan regex=True (nilai default) mengembalikan Series boolean yang bernilai True di setiap posisi ketika pola cocok di mana pun dalam string. Gunakan jangkar seperti ^ (awal) dan $ (akhir) untuk membatasi lokasi pencocokan. Penggunaan umum: menyaring baris ketika suatu kolom cocok dengan persyaratan format, seperti pola tanggal yang valid atau kode dengan format yang benar.
import pandas as pd
df = pd.DataFrame({
'code': ['US-001', 'UK-042', 'DE-18', 'FR-', 'us-003']
})
# Valid format: two uppercase letters, hyphen, 3 digits
valid = df['code'].str.contains(r'^[A-Z]{2}-\d{3}$', regex=True)
print(df['code'][valid].tolist())
# ['US-001', 'UK-042'].str.match() untuk Pencocokan Berjangkar
.str.match(pattern) memeriksa apakah setiap string diawali dengan pola tersebut (pola berjangkar di awal). Inilah perbedaannya dari contains(), yang mencari di mana pun dalam string. Gunakan match() ketika Anda hanya memperhatikan awalan string, dan fullmatch() ketika seluruh string harus cocok dengan pola.
import pandas as pd
df = pd.DataFrame({'id': ['ORD001', 'ORD002', 'RET003', 'ORDXYZ']})
# Match rows whose ID starts with 'ORD' followed by digits
orders = df['id'].str.match(r'ORD\d+')
print(df[orders])
# id
# 0 ORD001
# 1 ORD002
# match() is anchored at start, so 'ORDXYZ' (XYZ not digits) is excluded.str.extract() untuk Grup Penangkap
.str.extract(pattern) menggunakan grup penangkap () dalam pola regex untuk mengambil bagian tertentu dari string yang cocok. Metode ini mengembalikan DataFrame dengan satu kolom untuk setiap grup penangkap. Hanya kecocokan pertama dalam setiap string yang dikembalikan. Cara ini sangat cocok untuk mengekstrak data terstruktur yang disisipkan dalam teks bebas — seperti nilai numerik, tanggal, atau ID.
import pandas as pd
df = pd.DataFrame({
'notes': ['Shipped on 2024-01-15', 'Delivered on 2024-03-20', 'Pending', 'Shipped on 2024-07-04']
})
# Extract the date (YYYY-MM-DD) from the notes column
dates = df['notes'].str.extract(r'(\d{4}-\d{2}-\d{2})')
df['shipped_date'] = dates[0]
print(df[['notes', 'shipped_date']])
# notes shipped_date
# 0 Shipped on 2024-01-15 2024-01-15
# 1 Delivered on 2024-03-20 2024-03-20
# 2 Pending NaN
# 3 Shipped on 2024-07-04 2024-07-04Grup Penangkap Bernama
Anda dapat memberi nama pada grup penangkap menggunakan sintaks (?P<name>...). Ketika menggunakan grup bernama dengan str.extract(), DataFrame yang dihasilkan secara otomatis menggunakan nama-nama tersebut sebagai tajuk kolom — sehingga hasilnya dapat dipahami sendiri tanpa perlu mengganti nama kolom setelahnya.
import pandas as pd
df = pd.DataFrame({
'entry': ['Alice (25, Engineer)', 'Bob (30, Manager)', 'Carol (28, Analyst)']
})
# Named capturing groups
extracted = df['entry'].str.extract(
r'(?P<name>\w+) \((?P<age>\d+), (?P<role>\w+)\)'
)
print(extracted)
# name age role
# 0 Alice 25 Engineer
# 1 Bob 30 Manager
# 2 Carol 28 Analyst.str.extractall() untuk Beberapa Kecocokan
.str.extractall(pattern) menemukan semua kecocokan pola dalam setiap string, bukan hanya yang pertama. Metode ini mengembalikan DataFrame dengan MultiIndex: tingkat luar adalah indeks baris asli dan tingkat dalam (match) menghitung kecocokan untuk setiap baris. Ini berguna untuk mengekstrak semua angka, URL, atau kata kunci dari kolom teks bebas.
import pandas as pd
df = pd.DataFrame({
'text': ['Call 555-1234 or 555-5678', 'Contact 800-9000', 'No numbers']
})
# Extract all phone patterns
all_phones = df['text'].str.extractall(r'(\d{3}-\d{4})')
print(all_phones)
# 0
# match
# 0 0 555-1234
# 1 555-5678
# 1 0 800-9000.str.findall() untuk List Kecocokan
.str.findall(pattern) mengembalikan Series berisi list, dengan setiap list memuat semua kecocokan yang ditemukan dalam string pada baris tersebut. Berbeda dari extractall(), metode ini tidak membuat MultiIndex — setiap baris mendapatkan list kecocokan. Cara ini praktis ketika Anda ingin mempertahankan hasil dalam struktur datar atau menghitung jumlah kecocokan per baris.
import pandas as pd
df = pd.DataFrame({
'text': ['Buy 3 items for $10 each', 'Save $5 on 2 products', 'No deal']
})
# Find all dollar amounts
df['prices'] = df['text'].str.findall(r'\$\d+')
df['price_count'] = df['prices'].str.len()
print(df[['text', 'prices', 'price_count']])
# text prices price_count
# 0 Buy 3 items for $10 each [$10] 1
# 1 Save $5 on 2 products [$5] 1
# 2 No deal [] 0Pencocokan Tanpa Membedakan Huruf Besar-Kecil dengan re.IGNORECASE
Secara default, regex di Pandas membedakan huruf besar-kecil. Teruskan flags=re.IGNORECASE (atau re.I) agar pola tidak membedakan huruf besar-kecil. Dengan demikian, Anda tidak perlu menulis pola alternatif seperti [Pp][Yy][Tt][Hh][Oo][Nn] ketika ingin mencocokkan 'python', 'Python', atau 'PYTHON' secara setara.
import pandas as pd
import re
df = pd.DataFrame({
'skill': ['Python', 'JAVA', 'javascript', 'PyThOn developer', 'SQL']
})
# Case-insensitive search for python
mask = df['skill'].str.contains('python', flags=re.IGNORECASE, regex=True)
print(df[mask])
# skill
# 0 Python
# 3 PyThOn developerMemvalidasi Format dengan Pencocokan Penuh
.str.fullmatch(pattern) (ditambahkan pada Pandas 1.1) mengembalikan True hanya ketika seluruh string cocok dengan pola. Berbeda dari contains() yang mencocokkan substring, fullmatch setara dengan penggunaan jangkar ^...$. Ini adalah cara paling aman untuk memvalidasi kepatuhan terhadap format — alamat email, nomor telepon, kode pos, atau kolom apa pun dengan skema yang ketat.
import pandas as pd
df = pd.DataFrame({
'email': ['alice@example.com', 'bob_at_work', 'carol@test', 'dave@org.co']
})
# Simple email validation: word@word.word
valid_email = df['email'].str.fullmatch(r'[\w.+-]+@[\w-]+\.[\w.]+')
print(df[valid_email])
# email
# 0 alice@example.com
# 3 dave@org.coMengganti dengan Referensi Balik Regex
Saat menggunakan str.replace(pattern, repl, regex=True), string pengganti dapat menyertakan referensi balik seperti r'\1' untuk merujuk pada konten yang ditangkap dalam grup pertama (). Hal ini memungkinkan pemformatan ulang yang andal — misalnya, mengubah MM/DD/YYYY menjadi YYYY-MM-DD atau membungkus kata yang cocok dalam tag HTML.
import pandas as pd
df = pd.DataFrame({'phone': ['(555) 123-4567', '(800) 555-0199', '(212) 867-5309']})
# Reformat to 555-123-4567
df['phone_clean'] = df['phone'].str.replace(
r'\((\d{3})\) (\d{3})-(\d{4})',
r'\1-\2-\3',
regex=True
)
print(df)
# phone phone_clean
# 0 (555) 123-4567 555-123-4567
# 1 (800) 555-0199 800-555-0199
# 2 (212) 867-5309 212-867-5309Membangun Pengekstrak Data Berbasis Regex
Berikut contoh praktis menyeluruh: mengekstrak SKU dan harga produk dari kolom catatan yang tidak rapi menggunakan grup bernama. Jenis ekstraksi ini umum dilakukan saat mengimpor data dari sistem lama, ketika beberapa kolom digabungkan menjadi satu kolom teks.
import pandas as pd
df = pd.DataFrame({
'note': [
'SKU:A001 price:$49.99 in stock',
'SKU:B202 price:$12.50 low stock',
'No SKU available'
]
})
extracted = df['note'].str.extract(
r'SKU:(?P<sku>\w+).*price:\$(?P<price>[\d.]+)'
)
print(extracted)
# sku price
# 0 A001 49.99
# 1 B202 12.50
# 2 NaN NaNPemeriksaan Singkat
Uji pemahaman Anda tentang pencocokan pola dengan regex di Pandas.
Ringkasan Pelajaran
Dalam pelajaran ini, Anda mempelajari bahwa str.contains(regex) menyaring baris berdasarkan pola, str.extract() menangkap kecocokan pertama ke dalam kolom DataFrame (gunakan grup bernama agar hasilnya dapat dipahami sendiri), str.extractall() menemukan semua kecocokan pada setiap baris dengan MultiIndex, dan str.fullmatch() memvalidasi bahwa seluruh string sesuai dengan suatu pola. Selanjutnya, Anda akan menggabungkan dan membersihkan beberapa kolom teks.
Belajar Python dengan tutor AI — gratis
Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.
- Kursus
- 30
- Pelajaran
- 120
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Pencocokan Pola dengan Regex” gratis?
Ya — teks lengkap “Pencocokan Pola dengan Regex” 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 “Pencocokan Pola dengan Regex”?
Ekstrak substring dan periksa pola dengan .str.extract(), .str.contains(), dan .str.match() menggunakan ekspresi reguler. 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 3 dari 4.
Berapa lama pelajaran “Pencocokan Pola dengan Regex” 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
- Akses .str
- Memisahkan dan Mengganti String
- Pencocokan Pola dengan Regex
- Menggabungkan dan Membersihkan Kolom Teks