Pandas & NumPy Academy · Ders

Metin Sütunlarını Birleştirme ve Temizleme

Birden çok sütunu tek bir dizede birleştirin, boşlukları temizleyin ve tutarsız kategori etiketlerini standartlaştırın.

4. ders / 413 adım

Metin Sütunlarını Birleştirme ve Temizleme, CoddyKit'te ücretsiz bir Pandas & NumPy Academy dersidir. Bu, 4 dersinin 4. 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.

Metin Sütunlarını Birleştirme

Yaygın bir veri hazırlama görevi, birden çok sütundaki değerleri birleştirerek tek bir dize oluşturmaktır; örneğin ad ve soyadından tam ad, sokak, şehir ve ülkeden adres oluşturmak gibi. Pandas'ta dize sütunlarını iki Series'i (veya bir Series ile dize sabitini) + işleciyle birleştirirsiniz. Bunun öncesinde sayısal sütunları .astype(str) ile dizelere dönüştürmeniz gerekir.

import pandas as pd

df = pd.DataFrame({
    'first_name': ['Alice', 'Bob', 'Carol'],
    'last_name': ['Smith', 'Jones', 'White']
})

df['full_name'] = df['first_name'] + ' ' + df['last_name']
print(df['full_name'].tolist())
# ['Alice Smith', 'Bob Jones', 'Carol White']

Dize Olmayan Sütunlarla Birleştirme

Sayısal bir sütunu dize sütunuyla birleştirirken önce sayısal sütunu .astype(str) kullanarak dizeye dönüştürmelisiniz. Bir dize Series'i ile tam sayı Series'ini toplamaya çalışırsanız Python'un + işleci TypeError hatası verir. Bu, farklı türlerdeki sütunlardan bileşik anahtarlar veya etiketler oluştururken sık karşılaşılan bir kafa karışıklığı kaynağıdır.

import pandas as pd

df = pd.DataFrame({
    'product': ['Widget', 'Gadget'],
    'version': [3, 5]
})

# Must convert int to str before concatenating
df['label'] = df['product'] + ' v' + df['version'].astype(str)
print(df['label'].tolist())
# ['Widget v3', 'Gadget v5']

.str.cat() ile Ayırıcı Kullanarak Birleştirme

Series.str.cat(others, sep=), birden çok Series'i ayırıcıyla birleştirmenin Pandas'a özgü yoludur ve NaN değerlerini düzgün şekilde ele alır. Varsayılan olarak herhangi bir sütundaki NaN, o satırın sonucunun NaN olmasına neden olur. NaN değerinin sonuca yayılması yerine bir yer tutucuyla değiştirilmesi için na_rep='?' (veya herhangi bir dize) iletin.

import pandas as pd
import numpy as np

df = pd.DataFrame({
    'city': ['NYC', 'LA', None],
    'state': ['NY', None, 'TX'],
    'country': ['USA', 'USA', 'USA']
})

# Join with ', ' — NaN rows produce NaN by default
df['location'] = df['city'].str.cat(
    [df['state'], df['country']],
    sep=', ',
    na_rep='N/A'
)
print(df['location'].tolist())
# ['NYC, NY, USA', 'LA, N/A, USA', 'N/A, TX, USA']

Tutarsız Kategori Etiketlerini Normalleştirme

Gerçek dünya kategori sütunlarında yazım hataları, büyük-küçük harf farklılıkları veya farklı kısaltmalar (örneğin 'US', 'USA', 'United States') nedeniyle sık sık tutarsız etiketler bulunur. Standart çözüm, her varyantı kurallı biçime eşleyen bir eşleme sözlüğü oluşturup bunu .map() veya .replace() ile uygulamaktır.

import pandas as pd

df = pd.DataFrame({
    'country': ['US', 'USA', 'United States', 'uk', 'UK', 'United Kingdom']
})

canonical = {
    'US': 'United States', 'USA': 'United States', 'United States': 'United States',
    'uk': 'United Kingdom', 'UK': 'United Kingdom', 'United Kingdom': 'United Kingdom'
}

df['country_clean'] = df['country'].map(canonical)
print(df['country_clean'].tolist())
# ['United States', 'United States', 'United States',
#  'United Kingdom', 'United Kingdom', 'United Kingdom']

Boşlukları Kaldırma ve Harf Biçimini Standartlaştırma

Metin sütunlarını karşılaştırmadan veya gruplandırmadan önce ilk temizleme adımı olarak her zaman boşlukları kaldırın ve harf biçimini normalleştirin. Bir insanın aynı gördüğü iki değer (' Active' ve 'active'), baştaki boşluk ve büyük-küçük harf farkı nedeniyle Pandas tarafından farklı kabul edilir. İki adımlı bir zincir (önce strip, ardından lower) her iki sorunu da giderir.

import pandas as pd

df = pd.DataFrame({
    'status': ['  Active', 'INACTIVE', 'active ', ' Pending  ', 'ACTIVE']
})

df['status_clean'] = df['status'].str.strip().str.lower()
print(df['status_clean'].value_counts())
# active      3
# inactive    1
# pending     1

Yazım Hatalarını Düzeltmek için Yaklaşık Eşleştirme

Yazım hataları tam eşleştirmeyi engellediğinde yaklaşık eşleştirme, dizeler arasındaki benzerlik puanlarını hesaplar. rapidfuzz kitaplığı (veya klasik fuzzywuzzy) vektörleştirilmiş yaklaşık eşleştirme olanağı sunar. Tipik iş akışı şöyledir: her benzersiz hatalı değer için benzerlik eşiğinin üzerinde kalan en yakın kurallı değeri bulun ve bir düzeltme eşlemesi oluşturun.

# Conceptual example (requires: pip install rapidfuzz)
from rapidfuzz import process

canonical_cities = ['New York', 'Los Angeles', 'Chicago', 'Houston']
dirty_values = ['New Yrok', 'Los Angelas', 'Chicagoo']

for dirty in dirty_values:
    best, score, _ = process.extractOne(dirty, canonical_cities)
    print(f'{dirty!r} -> {best!r} (score={score:.0f}%)')
# 'New Yrok'   -> 'New York'    (score=91%)
# 'Los Angelas'-> 'Los Angeles' (score=96%)
# 'Chicagoo'   -> 'Chicago'     (score=94%)

explode() ile Çok Değerli Hücreleri Bölme

Bazen bir hücre, bir ayırıcıyla ayrılmış birden çok değer içerir (örneğin 'python,sql,pandas'). Listeler elde etmek için sütunu bölün, ardından her değer için bir satır oluşturmak üzere .explode() çağrısını yapın. Bu işlem, geniş ve sıkıştırılmış bir hücreyi düzenli uzun biçime dönüştürür; her satırda tam olarak bir değer bulunur. Bu, söz konusu değerlerle ilgili groupby ve join işlemleri için gereklidir.

import pandas as pd

df = pd.DataFrame({
    'user_id': [1, 2, 3],
    'skills': ['python,sql', 'java,kotlin,sql', 'python']
})

df['skills'] = df['skills'].str.split(',')
exploded = df.explode('skills')
print(exploded)
#    user_id   skills
# 0        1   python
# 0        1      sql
# 1        2     java
# 1        2   kotlin
# 1        2      sql
# 2        3   python

Metinlerdeki Karma Kodlamaları Ele Alma

Farklı kaynaklardan gelen metin verilerinde kodlama sorunları bulunabilir; örneğin \xa0 (bölünmez boşluk), \u2019 (kıvrımlı kesme işareti) veya bozulmuş aksanlı karakterler. Hızlı ve yalnızca ASCII kullanan bir temizleme için .str.encode('ascii', errors='replace').str.decode('ascii') kullanın ya da aksanları kaldırmadan önce ayırmak için .str.normalize('NFKD') kullanın.

import pandas as pd
import unicodedata

df = pd.DataFrame({'name': ['Caf\u00e9', 'na\u00efve', 'r\u00e9sum\u00e9']})

# Normalize and strip accents (NFKD decomposition + ascii encoding)
df['name_ascii'] = (
    df['name']
    .str.normalize('NFKD')
    .str.encode('ascii', errors='ignore')
    .str.decode('ascii')
)
print(df)
#       name name_ascii
# 0     Cafe       Cafe
# 1    naive      naive
# 2   resume     resume

Bileşik Anahtarlar Oluşturma

Birçok veri kümesinde, birleştirme veya yinelenen kayıtları ayıklama işlemlerinde bir satırı benzersiz biçimde tanımlamak için birden fazla sütundan bileşik anahtar oluşturmanız gerekir. Temizlenmiş dize sütunlarını (boşlukları kaldırılmış, küçük harfe dönüştürülmüş ve normalleştirilmiş) tek bir anahtar dizesinde birleştirmek, aynı varlığın her veri kaynağında biraz farklı yazılabildiği durumlarda veri kaynakları arasında tutarlı eşleştirme yapılmasını sağlar.

import pandas as pd

df = pd.DataFrame({
    'first': ['  Alice', 'BOB', ' Carol'],
    'last': ['Smith ', 'JONES', 'White  '],
    'dob': ['1990-01-15', '1985-07-22', '1992-11-30']
})

df['match_key'] = (
    df['first'].str.strip().str.lower() + '|' +
    df['last'].str.strip().str.lower() + '|' +
    df['dob']
)
print(df['match_key'].tolist())
# ['alice|smith|1990-01-15', 'bob|jones|1985-07-22', 'carol|white|1992-11-30']

Standart Kategori Listesini Zorunlu Kılma

Temizleme işleminden sonra, kategorik bir metin sütunundaki tüm değerlerin bilinen standart kümeye ait olduğunu doğrulayın. Kümede bulunmayan bir değer, yeni ve geçerli bir kategoriyi veya veri hatasını gösterebilir. Bilinmeyen değerleri sessizce silmek yerine manuel inceleme için günlüğe kaydedin ya da işaretleyin; böylece hiçbir sorun fark edilmeden gözden kaçmaz.

import pandas as pd

df = pd.DataFrame({
    'status': ['active', 'inactive', 'active', 'archived', 'unknown_status']
})

canonical = {'active', 'inactive', 'archived'}

unknown = df[~df['status'].isin(canonical)]['status'].unique()
print('Unknown statuses:', unknown.tolist())
# ['unknown_status']

# Flag unknown rows
df['status_valid'] = df['status'].isin(canonical)
print(df)

Eksiksiz Metin Temizleme İş Akışı

Bu dersteki tüm teknikleri uygulayan eksiksiz bir metin temizleme iş akışı aşağıda verilmiştir: boşlukları kaldırma, büyük-küçük harf kullanımını normalleştirme, kısaltmaları düzeltme, özel karakterleri kaldırma ve standart bir listeye göre doğrulama. Bu, herhangi bir veri alma modülüne ekleyebileceğiniz türden yeniden kullanılabilir bir işlevdir.

import pandas as pd

def clean_category_column(series, canonical_map, canonical_set):
    cleaned = (
        series
        .str.strip()
        .str.lower()
        .map(lambda x: canonical_map.get(x, x))  # fix known variants
    )
    unknown = cleaned[~cleaned.isin(canonical_set)]
    if not unknown.empty:
        print('Warning: unknown values:', unknown.unique().tolist())
    return cleaned

cmap = {'eng': 'engineering', 'hr': 'human_resources', 'mktg': 'marketing'}
cset = {'engineering', 'human_resources', 'marketing', 'finance'}

df = pd.DataFrame({'dept': ['Eng', 'HR', 'Marketing', 'MKTG', 'Legal']})
df['dept_clean'] = clean_category_column(df['dept'], cmap, cset)
print(df)

Hızlı Kontrol

Metin sütunlarını birleştirme ve temizleme konusundaki anlayışınızı sınayın.

Ders Özeti

Bu derste şunları öğrendiniz: sayısal değerleri dizelere dönüştürdükten sonra sütunları + işleci ile birleştirmeyi, ayraçla birleştirmek ve NaN değerlerini işlemek için str.cat(sep=) kullanmayı, tutarsız etiketleri normalleştirmek için .map() ile bir standart eşleme uygulamayı ve liste değerleri içeren hücreleri satırlara genişletmek için explode() kullanmayı. Veri kalitesi sorunlarını erkenden yakalamak için standart kümeleri zorunlu kılın. Sırada DataFrame'leri sütun değerlerine göre sıralayacağız.

Başlamak ücretsiz

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

“Metin Sütunlarını Birleştirme ve Temizleme” dersi ücretsiz mi?

Evet — “Metin Sütunlarını Birleştirme ve Temizleme” 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.

“Metin Sütunlarını Birleştirme ve Temizleme” dersinde ne öğreneceğim?

Birden çok sütunu tek bir dizede birleştirin, boşlukları temizleyin ve tutarsız kategori etiketlerini standartlaştırın. 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 4. dersidir.

“Metin Sütunlarını Birleştirme ve Temizleme” 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