Dizeleri Bölme ve Değiştirme
Dizeleri .str.split(expand=True) ile birden çok sütuna bölün ve alt dizeleri .str.replace() ile değiştirin.
Dizeleri Bölme ve Değiştirme, CoddyKit'te ücretsiz bir Pandas & NumPy Academy dersidir. Bu, 4 dersinin 2. 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.
Dizeleri Listeye Bölme
.str.split(sep), bir Series'deki her dizeyi ayırıcının her oluştuğu konumda böler ve listelerden oluşan bir Series döndürür. expand=True kullanılmadığında her öğe bir Python listesidir; bu, belirteçleri saymak veya liste düzeyinde ek işlemler yapmak için kullanışlıdır. Ayırıcı, değişmez bir dize veya düzenli ifade kalıbı olabilir.
import pandas as pd
df = pd.DataFrame({'tags': ['python,data,pandas', 'ml,ai', 'sql,db,query']})
# Split into a list of strings
df['tag_list'] = df['tags'].str.split(',')
print(df['tag_list'])
# 0 [python, data, pandas]
# 1 [ml, ai]
# 2 [sql, db, query]
# Count tags per row
df['tag_count'] = df['tag_list'].str.len()
print(df['tag_count'].tolist()) # [3, 2, 3]Sütunlara Bölmek için expand=True
.str.split() işlevine expand=True geçirmek, listelerden oluşan bir Series yerine bir DataFrame döndürür. Bu DataFrame'de her bölünmüş belirteç kendi sütununa (0, 1, 2, … sütunları) yerleşir. Bu, ayrılmış bir sütunu genişletmenin standart yoludur; örneğin 'first last' biçimindeki tam adı ayrı ad ve soyadı sütunlarına bölmek için kullanılır.
import pandas as pd
df = pd.DataFrame({'full_name': ['Alice Smith', 'Bob Jones', 'Carol White']})
# Split into two columns
name_parts = df['full_name'].str.split(' ', expand=True)
name_parts.columns = ['first_name', 'last_name']
df = pd.concat([df, name_parts], axis=1)
print(df)
# full_name first_name last_name
# 0 Alice Smith Alice Smith
# 1 Bob Jones Bob Jones
# 2 Carol White Carol Whiten= ile Bölme Sayısını Sınırlama
n parametresi en fazla kaç bölme yapılacağını sınırlar. .str.split(sep, n=1) en fazla bir kez böler ve en fazla iki parça oluşturur. Bu, bir dizenin yalnızca ilk bileşenine ihtiyaç duyduğunuz ve geri kalanını birlikte bırakabileceğiniz durumlarda kullanışlıdır; örneğin '@' konumunda bölerek bir e-postadaki etki alanını çıkarmak için kullanılabilir.
import pandas as pd
df = pd.DataFrame({'email': ['alice@example.com', 'bob@work.org', 'carol@test.net']})
# Split at '@', keep only the first split
parts = df['email'].str.split('@', n=1, expand=True)
df['username'] = parts[0]
df['domain'] = parts[1]
print(df[['username', 'domain']])
# username domain
# 0 alice example.com
# 1 bob work.org
# 2 carol test.netSağdan Bölme için rsplit()
.str.rsplit(sep, n=1) dizenin sağ tarafından bölme işlemi yapar. Bu, son bileşeni almak istediğinizde kullanışlıdır; örneğin son noktadan bölerek bir yolun dosya uzantısını çıkarmak için kullanılabilir. expand=True ile birlikte kullanıldığında iki sütun oluşturur: son ayırıcıdan önceki her şey ve sonraki her şey.
import pandas as pd
df = pd.DataFrame({'filepath': ['data/raw/sales.csv', 'data/clean/orders.xlsx', 'reports/q1.pdf']})
# Split on the last '/' to separate directory from filename
parts = df['filepath'].str.rsplit('/', n=1, expand=True)
df['directory'] = parts[0]
df['filename'] = parts[1]
print(df[['directory', 'filename']])
# directory filename
# 0 data/raw sales.csv
# 1 data/clean orders.xlsx
# 2 reports q1.pdf.str.replace() ile Alt Dize Değiştirme
.str.replace(pat, repl) her dizedeki bir kalıbın geçtiği yerleri değiştirir. Varsayılan olarak pat bir düzenli ifade olarak değerlendirilir; bu nedenle değişmez dize değiştirme işlemi için regex=False iletin. Değiştirme değeri sabit bir dize veya düzenli ifade geri başvurusu olabilir. Vektörleştirilmiş değiştirme işlemlerinde Python döngüsü yerine her zaman bunu kullanın.
import pandas as pd
df = pd.DataFrame({'price': ['$1,200.50', '$800.00', '$3,450.75']})
# Remove dollar sign and commas
df['price_clean'] = (
df['price']
.str.replace('$', '', regex=False) # literal $
.str.replace(',', '', regex=False) # literal comma
)
df['price_float'] = df['price_clean'].astype(float)
print(df)
# price price_clean price_float
# 0 $1,200.50 1200.50 1200.5
# 1 $800.00 800.00 800.0
# 2 $3,450.75 3450.75 3450.75Düzenli İfade Kalıplarıyla Değiştirme
regex=True (varsayılan değer) ilettiğinizde kalıp bir düzenli ifadedir ve değiştirme değeri, yakalanan gruplara başvurmak için geri başvurular (örneğin r'\1') içerebilir. Bu, tarihleri yeniden biçimlendirme, telefon numaralarını normalleştirme veya serbest metinden yapılandırılmış verileri çıkarma gibi güçlü metin dönüşümlerini mümkün kılar.
import pandas as pd
df = pd.DataFrame({'date': ['01-15-2024', '03-20-2024', '07-04-2024']})
# Reformat from MM-DD-YYYY to YYYY-MM-DD using groups
df['date_iso'] = df['date'].str.replace(
r'(\d{2})-(\d{2})-(\d{4})',
r'\3-\1-\2',
regex=True
)
print(df)
# date date_iso
# 0 01-15-2024 2024-01-15
# 1 03-20-2024 2024-03-20
# 2 07-04-2024 2024-07-04Yapılan Değişiklikleri Sayma
Bazen bir değiştirme işlemiyle gerçekte kaç değerin değiştirildiğini doğrulamak isteyebilirsiniz. Değişiklik yapılan satırları saymak için özgün ve değiştirilmiş Series değerlerini karşılaştırın. Bu doğrulama adımı, değiştirme kalıbının beklendiği gibi eşleştiğini doğrular ve düzenli ifade hatalarını erkenden yakalamanıza yardımcı olur.
import pandas as pd
df = pd.DataFrame({'text': ['foo bar', 'hello foo', 'world', 'foo foo']})
original = df['text'].copy()
df['text'] = df['text'].str.replace('foo', 'baz', regex=False)
changed = (df['text'] != original).sum()
print(f'{changed} rows were modified') # 3
print(df['text'].tolist())
# ['baz bar', 'hello baz', 'world', 'baz baz']Döngüyle Birden Çok Kalıbı Değiştirme
Birçok değiştirme uygulamanız gerektiğinde (örneğin onlarca kısaltmayı standartlaştırırken), bir eşleme sözlüğü üzerinde döngü kurun ve her değiştirmeyi sırayla uygulayın. Bu yaklaşım, tek ve karmaşık bir düzenli ifade alternatifinden daha kolay sürdürülebilir. Eşlemeyi iş kurallarından veya bir arama tablosundan oluşturun.
import pandas as pd
df = pd.DataFrame({'dept': ['Eng', 'Engg', 'HR', 'Human Resources', 'Mktg', 'Marketing']})
# Standardisation map
substitutions = {
'Engg': 'Engineering',
'Eng': 'Engineering',
'Human Resources': 'HR',
'Mktg': 'Marketing'
}
for old, new in substitutions.items():
df['dept'] = df['dept'].str.replace(old, new, regex=False)
print(df['dept'].tolist())
# ['Engineering', 'Engineering', 'HR', 'HR', 'Marketing', 'Marketing']Bölünmüş Parçaları Yeniden Birleştirme
Bölme işleminden sonra parçaları yeniden birleştirmeniz gerekebilir. Listelerden oluşan bir Series için .str.join(separator) kullanarak liste öğelerini her satır için tek bir dizede birleştirin. Sütunlar arasındaki değerleri birleştirmek için standart dize birleştirme işlemini + ve .astype(str) ile kullanın.
import pandas as pd
df = pd.DataFrame({'parts': [['alpha', 'beta'], ['foo', 'bar', 'baz']]})
# Join list elements with a hyphen
df['joined'] = df['parts'].str.join('-')
print(df['joined'])
# 0 alpha-beta
# 1 foo-bar-bazBoşlukları Normalleştirme
Yaygın bir metin temizleme görevi, art arda gelen birden çok boşluğu tek bir boşluğa indirmektir. Bu durum, HTML'deki boşluklar veya kopyala-yapıştır işleminin fazladan boşluk eklediği kazınmış metinlerde sık görülür. r'\s+' düzenli ifade kalıbı, bir veya daha fazla boşluk karakteriyle eşleşir ve bunların tümünü tek bir boşlukla değiştirir; ardından .str.strip() baştaki veya sondaki boşlukları kaldırır.
import pandas as pd
df = pd.DataFrame({'address': ['123 Main St', ' 456 Oak Ave ', '789 Pine St']})
df['address_clean'] = (
df['address']
.str.replace(r'\s+', ' ', regex=True)
.str.strip()
)
print(df['address_clean'].tolist())
# ['123 Main St', '456 Oak Ave', '789 Pine St']Uygulama: Yapılandırılmış Bir Dize Sütununu Ayrıştırma
Tek bir sütunun 'Alice:25:Engineer' gibi yapılandırılmış veriler içerdiği gerçekçi bir örneği inceleyelim. Ayırıcıya göre böler, ortaya çıkan sütunları adlandırır ve her birini uygun türe dönüştürürüz. Böylece yalnızca .str.split() ve astype() kullanarak ayrıştırma ve tür dönüştürmeden oluşan eksiksiz bir işlem hattı kurarız.
import pandas as pd
df = pd.DataFrame({'record': ['Alice:25:Engineer', 'Bob:34:Manager', 'Carol:28:Analyst']})
parts = df['record'].str.split(':', expand=True)
parts.columns = ['name', 'age', 'role']
parts['age'] = parts['age'].astype(int)
result = pd.concat([df, parts], axis=1)
print(result)
# record name age role
# 0 Alice:25:Engineer Alice 25 Engineer
# 1 Bob:34:Manager Bob 34 Manager
# 2 Carol:28:Analyst Carol 28 AnalystHızlı Kontrol
Dizeleri bölme ve değiştirme konusundaki anlayışınızı sınayın.
Ders Özeti
Bu derste şunları öğrendiniz: str.split(sep, expand=True) ayırıcı içeren bir sütunu birden çok sütuna genişletir, n= bölme sayısını sınırlar, str.rsplit() sağdan böler ve str.replace() kalıpları (düzenli ifade desteğiyle) değiştirir. Eksiksiz metin normalleştirme işlem hatları oluşturmak için bölme ve değiştirme işlemlerini strip ve lower ile zincirleyin. Sırada, alt dizeleri çıkarmak ve eşleştirmek için düzenli ifade kalıplarını kullanacağız.
Yapay zeka eğitmeniyle Python öğren — ücretsiz
Tarayıcında gerçek kod yaz ve çalıştır, 7/24 yapay zeka eğitmeninden anında yardım al; web'de ya da uygulamada kaldığın yerden devam et.
- Kurslar
- 30
- Dersler
- 120
Sıkça Sorulan Sorular
“Dizeleri Bölme ve Değiştirme” dersi ücretsiz mi?
Evet — “Dizeleri Bölme ve Değiş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.
“Dizeleri Bölme ve Değiştirme” dersinde ne öğreneceğim?
Dizeleri .str.split(expand=True) ile birden çok sütuna bölün ve alt dizeleri .str.replace() ile değiştirin. 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 2. dersidir.
“Dizeleri Bölme ve Değiş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
- .str Erişimcisi
- Dizeleri Bölme ve Değiştirme
- Düzenli İfadelerle Desen Eşleştirme
- Metin Sütunlarını Birleştirme ve Temizleme