← Blog
19 Ekim 2026· otomatik üretildi

Python ile Veri Temizleme: Pratik İpuçları

Gerçek dünya verisi her zaman dağınıktır. Python ile veri temizleme sürecini 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, modeli kurmakla değil veriyi temizlemekle geçer. "Garbage in, garbage out" sözü hâlâ geçerliliğini koruyor. Bu yazıda, gerçek projelerde sık karşılaştığım sorunları ve bunları Python ile nasıl hızlıca çözdüğümü paylaşacağım.

1. Eksik Verilerle Başa Çıkmak

Eksik değerler, veri temizlemenin birinci durağı. Pandas ile durumu ilk önce anlamaya çalışıyorum:


import pandas as pd

df = pd.read_csv("veri.csv")
print(df.isnull().sum())
print(df.isnull().mean() * 100)  # Yüzdelik kayıp oranı

Strateji belirlemek için şu kuralları uyguluyorum:

  • %5'ten az kayıp → Satırı sil (dropna)
  • %5–30 arası kayıp → Medyan veya mod ile doldur (fillna)
  • %30'dan fazla kayıp → Sütunu tamamen sil ya da özel imputation yöntemi kullan

df["yas"].fillna(df["yas"].median(), inplace=True)
df.dropna(subset=["kritik_sutun"], inplace=True)

2. Yinelenen Kayıtları Tespit Etmek

Veri tabanı birleştirme veya API çekimi sonrasında yinelenen satırlar kaçınılmaz oluyor:


print(df.duplicated().sum())
df.drop_duplicates(inplace=True)

# Belirli sütunlara göre tekilleştirme
df.drop_duplicates(subset=["musteri_id", "siparis_tarihi"], keep="last", inplace=True)

keep="last" parametresi, en güncel kaydı tutmak istediğimde hayat kurtarıyor.

3. Veri Tiplerini Doğrulamak

CSV'den okunan sütunlar çoğunlukla yanlış tiple geliyor. Örneğin tarih sütunları object olarak okunur:


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 çeviriyor. Böylece hata almak yerine sonradan filtreleme yapabiliyorum.

4. Aykırı Değerleri Yakalamak

Aykırı değerler (outlier), modelin performansını sessiz sedasız mahvedebilir. IQR yöntemi benim için en sağlam başlangıç noktası:


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

temiz_df = df[(df["gelir"] >= alt_sinir) & (df["gelir"] <= ust_sinir)]

Aykırı değeri silmek her zaman doğru değil; bazen gerçek bir olayı temsil ediyor. Bu yüzden önce görselleştirip karar veriyorum.

5. Metin Verilerini Standartlaştırmak

Kategorik ve metin sütunlarında tutarsızlıklar çok yaygın:


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

Büyük veri setlerinde replace yerine str.contains + regex kombinasyonu daha esnek oluyor.

6. Pipeline ile Süreci Otomatikleştirmek

Tüm bu adımları fonksiyonlara sarıp tek bir pipeline'da birleştiriyorum. Böylece yeni veri geldiğinde tek satırla temizleme başlıyor:


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

temiz_veri = temizle(ham_veri.copy())

Son Söz

Veri temizleme monoton görünse de aslında verinin hikâyesini anladığınız yerdir. Her anomali, veri üretim sürecinde bir şeyin yanlış gittiğine işaret eder. Temizleme yaparken veriyi silmek yerine anlamaya çalışmak, uzun vadede çok daha değerli içgörüler sağlıyor.

Bir sonraki yazıda Great Expectations kütüphanesi ile veri kalitesini otomatik olarak nasıl izleyebileceğimizi inceleyeceğim. Takipte kalın!