0Pricing
Pandas & NumPy Academy · Ders

Düzenli İfadelerle Desen Eşleştirme

Düzenli ifadeleri kullanarak alt dizeleri .str.extract(), .str.contains() ve .str.match() ile çıkarın ve desenleri denetleyin.

Düzenli İfadelerle Desen Eşleştirme, CoddyKit'te ücretsiz bir Pandas & NumPy Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Pandas & NumPy Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Pandas & NumPy Academy kursu toplamda 4 dersten oluşur.

Pandas'ta Neden Düzenli İfade Kullanılır?

Düzenli ifadeler (regex), dize kalıplarını tanımlamaya yarayan bir dildir. Pandas'ta .str erişimcisi, contains(), match(), extract(), findall() ve replace() aracılığıyla düzenli ifade işlevlerini sunar. Kalıplarınız basit contains/startswith denetimleriyle ifade edilemeyecek kadar karmaşık olduğunda düzenli ifadeler doğru araçtır; örneğin e-posta biçimlerini doğrulamak, serbest metinden telefon numaraları çıkarmak veya bir notlar sütunundaki tüm para tutarlarını bulmak için kullanılır.

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() ile Düzenli İfade Kullanımı

regex=True (varsayılan değer) ile kullanılan .str.contains(pattern), kalıbın dizenin herhangi bir yerinde eşleştiği konumlarda True değerine sahip bir boolean Series döndürür. Eşleşmenin gerçekleşeceği yeri sınırlamak için ^ (başlangıç) ve $ (son) gibi sabitleyiciler kullanın. Yaygın bir kullanım, bir alanın geçerli bir tarih kalıbı veya doğru biçimlendirilmiş bir kod gibi biçim gereksinimiyle eşleştiği satırları filtrelemektir.

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() ile Sabitlenmiş Eşleştirme

.str.match(pattern) her dizenin kalıpla başlayıp başlamadığını denetler (kalıp başlangıca sabitlenir). Bu, dizede herhangi bir yeri arayan contains() işlevinden farklıdır. Yalnızca dizenin ön ekiyle ilgilendiğinizde match(), dizenin tamamının kalıpla eşleşmesi gerektiğinde ise fullmatch() kullanın.

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() ile Yakalama Grupları

.str.extract(pattern), eşleşen dizelerin belirli bölümlerini almak için düzenli ifade kalıbındaki () yakalama gruplarını kullanır. Her yakalama grubu için bir sütun içeren bir DataFrame döndürür. Her dizede yalnızca ilk eşleşme döndürülür. Bu, serbest metne gömülü sayısal değerler, tarihler veya kimlikler gibi yapılandırılmış verileri çıkarmak için idealdir.

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

Adlandırılmış Yakalama Grupları

(?P<name>...) söz dizimini kullanarak yakalama gruplarına ad verebilirsiniz. Adlandırılmış grupları str.extract() ile kullandığınızda, elde edilen DataFrame bu adları otomatik olarak sütun başlığı olarak kullanır. Böylece sonradan sütunları yeniden adlandırmanız gerekmeden çıktı kendisini açıklar.

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() ile Birden Çok Eşleşme

.str.extractall(pattern) her dizede kalıbın tüm eşleşmelerini bulur; yalnızca ilk eşleşmeyi bulmakla yetinmez. Bir MultiIndex içeren DataFrame döndürür: dış düzey özgün satır dizinidir, iç düzey (match) ise her satırdaki eşleşmeleri sayar. Bu, serbest metin alanlarından tüm sayıları, URL'leri veya anahtar sözcükleri çıkarmak için kullanışlıdır.

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() ile Eşleşme Listesi

.str.findall(pattern), her listenin o satırın dizesinde bulunan tüm eşleşmeleri içerdiği listelerden oluşan bir Series döndürür. extractall() işlevinden farklı olarak MultiIndex oluşturmaz; her satıra bir eşleşme listesi atanır. Sonuçları düz bir yapıda tutmak veya satır başına eşleşmeleri saymak istediğinizde bu yaklaşım kullanışlıdır.

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

re.IGNORECASE ile Büyük-Küçük Harfe Duyarsız Eşleştirme

Pandas'ta düzenli ifadeler varsayılan olarak büyük-küçük harfe duyarlıdır. Kalıbı büyük-küçük harfe duyarsız hâle getirmek için flags=re.IGNORECASE (veya re.I) iletin. Böylece 'python', 'Python' veya 'PYTHON' değerlerini aynı şekilde eşleştirmek istediğinizde [Pp][Yy][Tt][Hh][Oo][Nn] gibi alternatif kalıplar yazmanız gerekmez.

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

Tam Eşleşmeyle Biçimleri Doğrulama

.str.fullmatch(pattern) (Pandas 1.1 ile eklenmiştir), yalnızca dizenin tamamı kalıpla eşleştiğinde True döndürür. Bir alt dizeyle eşleşen contains() işlevinden farklı olarak fullmatch, ^...$ ile sabitlemeye denktir. E-posta adresleri, telefon numaraları, posta kodları veya katı bir şemaya sahip herhangi bir alan için biçim uyumluluğunu doğrulamanın en güvenli yolu budur.

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

Düzenli İfade Geri Başvurularıyla Değiştirme

str.replace(pattern, repl, regex=True) kullanırken değiştirme dizesi, ilk grupta () yakalanan içeriğe başvurmak için geri başvurular (örneğin r'\1') içerebilir. Bu, güçlü yeniden biçimlendirme işlemlerini mümkün kılar; örneğin MM/DD/YYYY biçimini YYYY-MM-DD biçimine dönüştürebilir veya eşleşen bir sözcüğü HTML etiketleri içine alabilirsiniz.

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

Düzenli İfade Tabanlı Veri Çıkarıcı Oluşturma

Adlandırılmış grupları kullanarak karmaşık bir notlar sütunundan ürün SKU'sunu ve fiyatını çıkardığımız, baştan sona pratik bir örneği inceleyelim. Bu tür çıkarma işlemleri, birden çok alanın tek bir metin alanında birleştirildiği eski sistemlerden veri aktarılırken yaygındır.

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

Hızlı Kontrol

Pandas'ta düzenli ifadelerle kalıp eşleştirme konusundaki anlayışınızı sınayın.

Ders Özeti

Bu derste şunları öğrendiniz: str.contains(regex) satırları kalıba göre filtreler, str.extract() ilk eşleşmeyi bir DataFrame sütununa alır (kendini açıklayan bir çıktı için adlandırılmış grupları kullanın), str.extractall() her satırdaki tüm eşleşmeleri bir MultiIndex ile bulur ve str.fullmatch() dizenin tamamının bir kalıba uyduğunu doğrular. Sırada, birden çok metin sütununu birleştirip temizleyeceğiz.

Sıkça Sorulan Sorular

“Düzenli İfadelerle Desen Eşleştirme” dersi ücretsiz mi?

Evet — “Düzenli İfadelerle Desen Eşleştirme” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Pandas & NumPy Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Pandas & NumPy Academy kursu toplamda 4 dersten oluşur.

“Düzenli İfadelerle Desen Eşleştirme” dersinde ne öğreneceğim?

Düzenli ifadeleri kullanarak alt dizeleri .str.extract(), .str.contains() ve .str.match() ile çıkarın ve desenleri denetleyin. Pandas & NumPy Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Pandas & NumPy Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Pandas & NumPy Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.

“Düzenli İfadelerle Desen Eşleştirme” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Pandas & NumPy Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Pandas & NumPy Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. .str Erişimcisi
  2. Dizeleri Bölme ve Değiştirme
  3. Düzenli İfadelerle Desen Eşleştirme
  4. Metin Sütunlarını Birleştirme ve Temizleme
← Pandas & NumPy Academy Sayfasına Dön