← Blog
15 Eylül 2026· otomatik üretildi

Python ile Veri Temizleme: Pratik İpuçları

Gerçek dünya verileri hiçbir zaman mükemmel gelmez. Python ile veri temizleme sürecinizi hızlandıracak pratik ipuçlarını keşfedin.

#python#veri temizleme#pandas#veri bilimi

Veri bilimi projelerinde zamanın büyük çoğunluğu —kimi araştırmalara göre %80'i— veriyi analize hazırlamaya harcanır. Modeller ne kadar şık olursa olsun, kirli veriyle beslenirse sonuçlar yanıltıcı olur. Bu yazıda, Python ekosistemini kullanarak veri temizleme sürecini nasıl daha verimli ve tekrarlanabilir hâle getirebileceğimizi ele alacağız.

1. Eksik Verileri Tespit Edin ve Bir Strateji Belirleyin

İlk adım her zaman tablonun genel sağlığını görmektir:


import pandas as pd

df = pd.read_csv("veri.csv")
print(df.isnull().sum())
print(df.isnull().mean() * 100)  # Yüzde olarak

Eksik veri oranına göre üç farklı yaklaşım izlenebilir:

  • %5'ten az: Satırı veya sütunu silmek genellikle güvenlidir.
  • %5–30 arası: Ortalama, medyan ya da mod ile doldurma (fillna) makul bir seçenek.
  • %30'dan fazla: Sütunun gerçekten işe yarayıp yaramadığını sorgulamalısınız; belki de o özelliği tamamen çıkarmak daha dürüsttür.

2. Yinelenen Satırlardan Kurtulun

Yinelenen kayıtlar özellikle birden fazla kaynaktan gelen verilerde sık karşılaşılan bir sorundur:


print(f"Yinelenen satır sayısı: {df.duplicated().sum()}")
df = df.drop_duplicates()

Tüm sütunlarda değil, yalnızca belirli bir anahtar üzerinden tekilleştirmek istiyorsanız subset parametresini kullanın:


df = df.drop_duplicates(subset=["musteri_id", "tarih"])

3. Veri Tiplerini Düzeltin

Bir tarih sütunu object olarak mı geliyor? Sayılar string mi saklanıyor? Bu, sonraki adımlarda büyük sorun çıkarır:


df["tarih"] = pd.to_datetime(df["tarih"], errors="coerce")
df["fiyat"] = pd.to_numeric(df["fiyat"].str.replace(",", "."), errors="coerce")

errors="coerce" parametresi, dönüştürülemeyen değerleri NaN'a çevirir; böylece hata almak yerine temiz bir veri akışı elde edersiniz.

4. Aykırı Değerleri Yakalayın

Aykırı değerlerin hepsini silmek doğru değildir; önce anlayın, sonra karar verin. IQR yöntemi sıkça başvurulan pratik bir yaklaşımdır:


Q1 = df["gelir"].quantile(0.25)
Q3 = df["gelir"].quantile(0.75)
IQR = Q3 - Q1

alt_sinir = Q1 - 1.5 * IQR
ust_sinir = Q3 + 1.5 * IQR

aykirilar = df[(df["gelir"] < alt_sinir) | (df["gelir"] > ust_sinir)]
print(f"Aykırı değer sayısı: {len(aykirilar)}")

5. Metin Verilerini Standartlaştırın

Kategorik ve metin verilerinde büyük/küçük harf tutarsızlıkları, baştaki/sondaki boşluklar ve yazım farklılıkları ciddi sorun yaratır:


df["sehir"] = df["sehir"].str.strip().str.lower()
df["sehir"] = df["sehir"].replace({"i̇stanbul": "istanbul", "ankara ": "ankara"})

Daha büyük ölçekli yazım eşleştirmeleri için thefuzz (eski adıyla fuzzywuzzy) kütüphanesi oldukça işlevseldir.

6. Temizleme Adımlarını Fonksiyona Dönüştürün

En sık yapılan hatalardan biri temizleme işlemlerini notebook hücrelerine dağıtmaktır. Bunun yerine adımları bir fonksiyon veya pipeline içinde toplayın:


def temizle(df: pd.DataFrame) -> pd.DataFrame:
    df = df.drop_duplicates()
    df["tarih"] = pd.to_datetime(df["tarih"], errors="coerce")
    df["sehir"] = df["sehir"].str.strip().str.lower()
    df = df.dropna(subset=["musteri_id"])
    return df

temiz_df = temizle(df)

Bu yaklaşım hem test edilebilirliği artırır hem de aynı adımları yeni veri geldiğinde kolayca tekrar çalıştırmanızı sağlar.

---

Veri temizleme, sıkıcı görünse de aslında en kritik analitik kararların verildiği aşamadır. Hangi kaydın atılacağı, hangi değerin doldurulacağı ve neyin aykırı sayılacağı; iş mantığıyla doğrudan ilgilidir. Python bu süreci hızlandırır, ama asıl zekâ sizden gelmelidir.