Yinelenenleri Belirleme ve Kaldırma
duplicated() ve drop_duplicates() ile tam ve kısmi yinelenenleri bulun ve hangi yinelenen kaydın korunacağına karar verin.
Yinelenenleri Belirleme ve Kaldırma, CoddyKit'te ücretsiz bir Pandas & NumPy Academy dersidir. Bu, 4 dersinin 1. 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.
Yinelenen Kayıtlar Neden Önemlidir?
Yinelenen satırlar, herhangi bir hata mesajı vermeden sayımları, gelir toplamlarını ve ortalamaları fark ettirmeden artırır. 500 yinelenen sipariş kaydı içeren bir satış veri kümesi, geliri bu 500 siparişin toplamı kadar fazla gösterir. Yinelenen kayıtları belirlemek ve kaldırmak, herhangi bir toplulaştırma veya modelleme işleminden önce yapmanız gereken ilk temizleme adımlarından biridir; çünkü sonraki hatalar bu tek bozulma kaynağından katlanarak büyür.
import pandas as pd
df = pd.read_csv('orders.csv')
print('Shape before dedup:', df.shape)
print('Exact duplicates:', df.duplicated().sum())Tam Yinelenen Kayıtları Bulma
df.duplicated(), önceki bir satırın tamamen aynısı olan her satır için True değerine sahip bir boole Series döndürür. Varsayılan keep='first', ilk oluşum dışındaki tüm oluşumları işaretler. keep=False geçirilmesi, yinelenen kaydın hangi kopyasının tutulacağına karar vermeden önce tüm kopyaları incelemek istediğinizde yararlı olacak şekilde, yinelenen kaydın tüm oluşumlarını işaretler.
# Mark only the second+ occurrences
partial_dups = df[df.duplicated(keep='first')]
print('Rows to remove:', len(partial_dups))
# Mark ALL copies of any duplicate
all_dups = df[df.duplicated(keep=False)]
print('Rows involved in duplicates:', len(all_dups))Tam Yinelenen Kayıtları Kaldırma
Tam olarak yinelenen satırları df.drop_duplicates() ile kaldırın. Varsayılan olarak ilk oluşumu tutar ve diğerlerini kaldırır. Verilerinizde zaman damgası varsa ve sonraki satırlar daha güvenilir kabul ediliyorsa, en güncel kaydı tutmak için keep='last' geçirin. Beklenen sayıda satırın kaldırıldığını doğrulamak için önce ve sonra satır sayısını mutlaka kontrol edin.
df_clean = df.drop_duplicates(keep='first')
print('Rows removed:', len(df) - len(df_clean))
print('Shape after dedup:', df_clean.shape)Kısmi Yinelenen Kayıtlar: Anahtar Tabanlı
Satırlar kısmen yinelenen kayıtlar olabilir: bir iş anahtarını (örneğin order_id) paylaşırlar, ancak bir üst sistemdeki hata aynı kaydın iki sürümünü oluşturduğu için diğer sütunlarda farklılık gösterirler. Aynı anahtara sahip, ancak diğer sütunlarda farklı değerler içerebilecek satırları bulmak için df.duplicated(subset=['order_id']) kullanın. Bunları nasıl uzlaştıracağınıza karar vermeden önce bu satırları inceleyin.
key_dups = df[df.duplicated(subset=['order_id'], keep=False)]
print('Orders with duplicate IDs:')
print(key_dups.sort_values('order_id').head(10))Hangi Yinelenen Kaydın Tutulacağına Karar Verme
Kısmi yinelenen kayıtlar olduğunda hangi kaydın esas alınacağına karar vermeniz gerekir. Yaygın stratejiler şunlardır: en yeni zaman damgasına sahip satırı tutmak (en güncel güncelleme), boş olmayan değerleri en fazla olan satırı tutmak veya bir kayıtta düzeltmeler varsa daha yüksek para tutarına sahip satırı tutmak. Eşitlik bozma ölçütününüze göre sıralayın, ardından ilk (veya son) oluşumu tutarak yinelenen kayıtları kaldırın.
# Keep the record with the latest update timestamp
df_sorted = df.sort_values('updated_at', ascending=False)
df_dedup = df_sorted.drop_duplicates(subset=['order_id'], keep='first')
print('Kept:', len(df_dedup), 'unique orders')Birbirine Çok Benzeyen Yinelenen Kayıtları Belirleme
Birbirine çok benzeyen yinelenen kayıtlar, aynı varlığı temsil eden ancak küçük farklılıklar içeren satırlardır; örneğin yazım hatası bulunan aynı müşteri adı veya 1 sentlik yuvarlama farkı taşıyan aynı işlem. Tam yinelenen kayıtları belirleme işlemi bunları yakalayamaz. Yaklaşımlardan biri anahtar sütununa göre gruplandırıp saymaktır: bir müşteri adı küçük farklılıklarla görünüyorsa, yinelenen kayıtları kaldırmadan önce normalleştirmek için .str.strip().str.lower() kullanın.
df['customer_normalized'] = df['customer_name'].str.strip().str.lower()
near_dups = df.groupby('customer_normalized').size().sort_values(ascending=False)
print(near_dups[near_dups > 1].head())GroupBy Toplulaştırmasıyla Yinelenen Kayıtları Birleştirme
Yinelenen satırları yalnızca kaldırmak yerine birleştirmeniz gerektiğinde groupby().agg() kullanın. Örneğin iki satır aynı siparişi temsil ediyor, ancak birinde gönderim adresi, diğerinde fatura adresi bulunuyorsa 'first' ile (boş olmayan değerleri tercih ederek) veya yinelenen kayıtlar arasındaki boş olmayan değerleri birleştiren özel bir işlevle toplulaştırma yapabilirsiniz.
def coalesce(*args):
for a in args:
if pd.notna(a):
return a
return None
df_merged = df.groupby('order_id').agg(
customer=('customer_name', 'first'),
amount=('amount', 'max'),
date=('order_date', 'min')
).reset_index()
print(df_merged.head())Satır Sırası Duyarlılığını Kontrol Etme
drop_duplicates(keep='first') işleminin sonucu satır sırasına bağlıdır. DataFrame, ORDER BY yan tümcesi olmadan yapılan bir veritabanı sorgusundan yüklendiyse satır sırası belirli değildir; yani tutulan kayıt çalıştırmalar arasında değişebilir. İşlemin belirli ve yeniden üretilebilir olması için yinelenen kayıtları kaldırmadan önce her zaman kararlı bir anahtara (örneğin birincil anahtar veya zaman damgası) göre sıralayın.
# Sort by primary key before deduplication for deterministic results
df = df.sort_values('order_id').reset_index(drop=True)
df_clean = df.drop_duplicates(subset=['order_id'], keep='first')
print('Deterministic dedup complete.')Yinelenen Kayıtları Kaldırma Sonucunu Doğrulama
Yinelenen kayıtları kaldırdıktan sonra sonucu üç kontrolle doğrulayın: geriye tam olarak yinelenen kayıt kalmadığını (df_clean.duplicated().sum() == 0), yinelenen iş anahtarı bulunmadığını (df_clean.duplicated(subset=['order_id']).sum() == 0) ve beklenen satır sayısının makul olduğunu kontrol edin. Gelecekteki veri değişiklikleri temizleme mantığını geçersiz kılarsa yüksek sesle hata vermeleri için bunları doğrulamalar olarak yazın.
assert df_clean.duplicated().sum() == 0, 'Exact duplicates remain'
assert df_clean.duplicated(subset=['order_id']).sum() == 0, 'Duplicate order IDs remain'
print('Deduplication verified. Rows:', len(df_clean))Kaldırılan Yinelenen Kayıtları Belgeleme
İyi veri temizleme işlemi yeniden üretilebilir ve denetlenebilir olmalıdır. Temizleme raporu sözlüğüne kaldırılan satır sayısını, tekilleştirme anahtarını ve eşitlik bozma kuralını kaydedin. Bu raporu temiz veri dosyasının yanında kalıcı olarak saklayın; böylece daha sonra pipeline'ı çalıştıran herkes kodu yeniden okumadan temizleme kararlarını doğrulayabilir. Veri temizlemede şeffaflık, analiz sonuçlarına duyulan güveni artırır.
cleaning_log = {
'original_rows': len(df),
'dedup_key': 'order_id',
'tiebreak': 'keep first by updated_at desc',
'rows_removed': len(df) - len(df_clean),
'clean_rows': len(df_clean)
}
for k, v in cleaning_log.items():
print(f'{k}: {v}')Tekilleştirilmiş Veri Kümesini Kaydetme
Tekilleştirilmiş DataFrame'i özgün dosyanın üzerine yazmak yerine yeni bir dosyaya kaydedin. Böylece ham veriler denetim için korunur. Dosyayı _clean veya _deduped sonekiyle açıkça adlandırın ve birden fazla temizleme geçişinin ayırt edilebilmesi için çalıştırma tarihini ekleyin. Sonraki pipeline adımlarında hızlı yeniden yükleme için Parquet kullanın.
from datetime import date
output_path = f'orders_clean_{date.today()}.parquet'
df_clean.to_parquet(output_path, index=False)
print(f'Saved {len(df_clean)} rows to {output_path}')Hızlı Kontrol
Bu dersteki Veri Analizi kavramlarını anlayıp anlamadığınızı test edin.
Ders Özeti
Bu derste şunları öğrendiniz: duplicated() ve drop_duplicates() ile tam ve kısmi yinelemeleri saptamayı, sıralama ve toplulaştırma stratejilerini kullanarak hangi yinelemenin tutulacağını seçmeyi ve iddialarla sonuçları doğrulayıp temizleme kararlarını kaydetmeyi. Sırada aykırı değerleri saptama ve ele alma tekniklerini inceleyeceğiz.
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
“Yinelenenleri Belirleme ve Kaldırma” dersi ücretsiz mi?
Evet — “Yinelenenleri Belirleme ve Kaldırma” 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.
“Yinelenenleri Belirleme ve Kaldırma” dersinde ne öğreneceğim?
duplicated() ve drop_duplicates() ile tam ve kısmi yinelenenleri bulun ve hangi yinelenen kaydın korunacağına karar verin. 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 1. dersidir.
“Yinelenenleri Belirleme ve Kaldırma” 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
- Yinelenenleri Belirleme ve Kaldırma
- Aykırı Değerleri Belirleme ve Ele Alma
- Tutarsız Kategorileri Standartlaştırma
- Şema Doğrulama ve İddialar