Pandas & NumPy Academy · Pelajaran

Pencocokan Pola dengan Regex

Ekstrak substring dan periksa pola dengan .str.extract(), .str.contains(), dan .str.match() menggunakan ekspresi reguler.

Pelajaran 3 dari 413 langkah

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-04

Grup 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      []            0

Pencocokan 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 developer

Memvalidasi 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.co

Mengganti 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-5309

Membangun 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    NaN

Pemeriksaan 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.

Gratis untuk memulai

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

  1. Akses .str
  2. Memisahkan dan Mengganti String
  3. Pencocokan Pola dengan Regex
  4. Menggabungkan dan Membersihkan Kolom Teks
← Kembali ke Pandas & NumPy Academy