Yazılarımız

Veri Akademi

PANDAS DATAFRAME NEDİR? TEMİZLEME, DÖNÜŞÜM VE PRATİK TEKNİKLER

Veriyle çalışan herkesin bir noktada “Tabloyu nasıl daha kolay yönetirim?” sorusuna takıldığı olur. Pandas’ın DataFrame yapısı tam da bu noktada devreye girer: Excel benzeri bir tablo mantığını Python’ın esnekliğiyle birleştirir ve veri analizini birkaç satır kodla yönetilebilir hale getirir.

Bu yazıda DataFrame’in ne olduğundan başlayıp gerçek hayatta sık karşılaşılan temizleme ve dönüşüm ihtiyaçlarına kadar uzanacağız. Amaç sadece tanım vermek değil; veriyi okuma, seçme, düzeltme, birleştirme, özetleme gibi adımları pratik tekniklerle netleştirmek.

Örnekler boyunca küçük ama gerçekçi senaryolar kullanacağız. Böylece DataFrame’in “sadece bir tablo” olmadığını; indeks, tip, performans ve yeniden şekillendirme gibi konularla birlikte güçlü bir analiz aracı olduğunu göreceksiniz.

Notebook ekranında sütun ve satırlardan oluşan bir tablo, yanında özet istatistikler ve filtrelenmiş sonuçlar

Pandas DataFrame nedir ve neden bu kadar kullanılır?

DataFrame, satır ve sütunlardan oluşan iki boyutlu bir veri yapısıdır. Her sütunun veri tipi ayrı olabilir; bir sütun metin, diğeri sayı, bir diğeri tarih olabilir. Bu heterojen yapı, gerçek dünyadaki verileri (CSV, Excel, veritabanı çıktıları) doğal şekilde temsil etmenizi sağlar.

Bir DataFrame’i güçlü kılan, yalnızca “tablo” olması değil; veriye ilişkin birçok işlemi tek bir çatı altında sunmasıdır: filtreleme, sıralama, birleştirme, dönüştürme, eksik değer yönetimi, gruplama, pivotlama ve daha fazlası.

DataFrame, Series ve indeks ilişkisi

Pandas’ta tek sütun çoğu zaman Series olarak temsil edilir; DataFrame ise birden çok Series’in aynı indeks üzerinde hizalanmış halidir. İndeks, satır kimliği gibi çalışır; varsayılan olarak 0’dan başlar ama tarih, kimlik veya çok seviyeli (MultiIndex) bir yapı da olabilir. İndeksin doğru seçimi, hem okunabilirliği hem de performansı doğrudan etkiler.

DataFrame’in tipik kullanım alanları

  • Ham veriyi hızlıca keşfetme: satır sayısı, örnek kayıtlar, dağılımlar
  • Veri temizleme: eksik değer, kopya kayıt, bozuk tipler
  • Analiz ve raporlama: segment bazlı özetler, KPI hesapları
  • Modelleme öncesi hazırlık: özellik mühendisliği, kodlama, ölçekleme

DataFrame oluşturma ve veriyi içeri alma

DataFrame çoğu zaman dosyadan veya veritabanından gelir. En yaygın başlangıç noktaları read_csv, read_excel ve SQL sorgularıdır. İlk hedef, veri tiplerini ve temel yapıyı hızla doğrulamaktır.

CSV’den okuma ve ilk keşif adımları

Veriyi okuduktan sonra genellikle head(), info(), describe() gibi fonksiyonlarla ilk kontrol yapılır. Bu aşamada sütun adları, tipler, boş değer oranları ve beklenmedik kategoriler hızlıca ortaya çıkar.

import pandas as pd

df = pd.read_csv("customers.csv")

# Hızlı keşif
print(df.head())
print(df.info())
print(df.describe(numeric_only=True))

# Kolon adlarını standartlaştırmak (örnek)
df.columns = [c.strip().lower().replace(" ", "_") for c in df.columns]

Kolon adları ve şema kontrolü için pratikler

Projelerde sık görülen sorunlardan biri, aynı kavramın farklı dosyalarda farklı adlarla gelmesidir. Bu nedenle kolon adlarını erken aşamada normalize etmek, ilerideki birleştirme ve dönüşüm adımlarını kolaylaştırır. Ayrıca “beklenen şema” yaklaşımıyla kritik sütunların varlığını doğrulamak, hatayı erken yakalamanızı sağlar.

Bir veri sözlüğü tablosu ve yanında kolon adlarının standartlaştırıldığı bir kontrol listesi, tutarlı şema vurgusu

Seçim, filtreleme ve satır-sütun erişimi

DataFrame üzerinde çalışmanın günlük ekmeği seçim ve filtrelemedir. İyi bir erişim alışkanlığı; hem hata oranını azaltır hem de kodu okunur kılar. Burada üç temel yaklaşım öne çıkar: sütun seçimi, koşullu filtreleme ve konuma/etikete göre erişim.

loc ve iloc: etiket mi konum mu?

loc etiket (label) temellidir; indeks değerine göre seçim yapar. iloc ise konum (position) temellidir; 0 tabanlı indeksle çalışır. İndeksiniz anlamlı bir kimlik içeriyorsa loc çoğu zaman daha güvenlidir.

Koşullu filtreleme ve okunabilirlik

Filtreleme yaparken parantez ve operatör önceliği kritik önem taşır. Birden çok koşul varsa, ifadeleri ayrı değişkenlere bölmek hem debug süresini kısaltır hem de kodu bakımı kolay hale getirir.

# Koşul değişkenleri
is_active = df["status"] == "active"
high_value = df["lifetime_value"] >= 1000
recent = pd.to_datetime(df["last_seen"]) >= "2025-01-01"

filtered = df[is_active & high_value & recent]
selected = filtered[["customer_id", "segment", "lifetime_value"]].sort_values("lifetime_value", ascending=False)

Sık yapılan hata: kopya mı görünüm mü?

Pandas’ta bazı seçimler “view” benzeri davranabilir. Bu yüzden bir alt küme üzerinde değişiklik yapacaksanız, açıkça copy() almak ve .loc ile atama yapmak güvenli bir alışkanlıktır. Böylece beklenmedik yan etkiler ve uyarılar (özellikle SettingWithCopyWarning) büyük ölçüde azalır.

Veri temizleme: eksik değer, kopya kayıt ve tutarsızlıklar

Gerçek dünyada veriler neredeyse hiç “temiz” gelmez. Eksik değerler, yanlış tipler, kopya kayıtlar, beklenmedik kategoriler veya uç değerler analiz sonuçlarını çarpıtabilir. DataFrame, bu problemleri sistematik şekilde çözmeniz için zengin bir araç seti sunar.

Eksik değerleri tespit etme ve strateji belirleme

İlk adım, eksik değerlerin oranını ve hangi sütunlarda yoğunlaştığını görmek olmalı. Sonraki adım ise iş mantığına göre strateji seçmektir: silmek, doldurmak, bayrak eklemek veya daha iyi veri kaynağına dönmek. Her durumda “neden”i kayıt altına almak, analizin izlenebilirliği açısından önemlidir.

  • Kritik kimlik alanı eksikse: genellikle satır dışlanır
  • Sayı alanında az eksik varsa: medyan gibi dayanıklı bir değerle doldurulur
  • Kategorik alanda eksikse: “unknown” gibi ayrı bir sınıf mantıklı olabilir

Kopya kayıtları yönetme

Kopya satırlar her zaman tamamen aynı görünmeyebilir. Bazen aynı müşteri için birden fazla kayıt vardır ve “en güncel” olanı seçmek gerekir. Bu nedenle duplicated ile birlikte sıralama ve iş kuralı kullanmak daha güvenilir sonuç verir.

Tip dönüşümü ve kirli veri örüntüleri

En sık görülen problemlerden biri, sayısal sütunların metin olarak gelmesidir. Virgül/nokta ayracı, para birimi simgeleri, boşluklar veya “N/A” gibi değerler dönüşümü bozabilir. Bu tür durumlarda önce temizleyip sonra dönüştürmek gerekir. Doğru tip doğru analiz demektir.

Veri dönüşümü: yeni sütunlar, map/apply ve vektörel işlemler

Temiz veriye ulaştıktan sonra, analiz ihtiyacınıza göre sütunları dönüştürür ve yeni özellikler üretirsiniz. Burada önemli olan, mümkün olduğunca vektörel işlemleri tercih ederek hem performansı hem de kod kalitesini korumaktır.

assign ile zincirleme, okunur dönüşüm akışı

assign ile dönüşümleri ardışık biçimde yazmak, özellikle “pipeline” benzeri bir akış oluşturmak isteyenler için faydalıdır. Bu yaklaşım, ara değişkenleri azaltırken dönüşüm adımlarını görünür kılar.

map, replace ve kategorik düzenleme

Segment, kanal, durum gibi alanlarda standartlaştırma gerekir. Örneğin “E-posta”, “email”, “Eposta” gibi varyasyonları tek bir değere indirgemek raporların tutarlılığını artırır. Bu adım, semantik olarak küçük görünse de sonuçların güvenilirliği açısından kritiktir.

apply ne zaman, vektörel ne zaman?

apply esnek ama daha yavaştır; satır satır çalışmaya yaklaşır. Basit aritmetik ve koşullar için vektörel ifadeler (ör. where, clip, str erişimcileri) daha hızlı ve genelde daha temizdir. İhtiyaç karmaşıksa ve vektörel seçenek yoksa, apply kontrollü şekilde kullanılabilir.

import numpy as np
import pandas as pd

df["signup_date"] = pd.to_datetime(df["signup_date"], errors="coerce")

df = (df
      .assign(
          email_domain=lambda x: x["email"].str.split("@").str[-1].str.lower(),
          is_premium=lambda x: x["plan"].isin(["pro", "business"]),
          age_bucket=lambda x: pd.cut(x["age"], bins=[0, 18, 25, 35, 50, 120], right=False,
                                     labels=["0-17", "18-24", "25-34", "35-49", "50+"]),
          clean_revenue=lambda x: (x["revenue"]
                                   .astype(str)
                                   .str.replace(",", ".", regex=False)
                                   .str.replace("₺", "", regex=False)
                                   .str.strip())
      ))

df["clean_revenue"] = pd.to_numeric(df["clean_revenue"], errors="coerce")
df["clean_revenue"] = df["clean_revenue"].fillna(0).clip(lower=0)

Birleştirme ve yeniden şekillendirme: merge, concat, pivot

Analizde çoğu zaman tek bir tablo yetmez. Müşteri bilgisi ayrı, siparişler ayrı, destek kayıtları ayrı olabilir. DataFrame bu parçaları birleştirip anlamlı bir bütün üretmenizi sağlar. Bu bölümde merge/join mantığını ve pivot/reshape tekniklerini pratik bir çerçeveyle ele alacağız.

merge ile join türleri ve anahtar seçimi

merge SQL’deki join’lere benzer: inner, left, right, outer. En yaygın olanı “sol tabloyu koru” yaklaşımıyla left join’dir. Anahtar sütunların tip ve format olarak aynı olması gerekir; aksi durumda beklenmedik eşleşme kayıpları yaşanır.

concat ile tablo yığma ve şema uyumu

Aylık dosyalar gibi benzer şemaya sahip tabloları alt alta eklemek için concat uygundur. Ancak kolon setlerinin tutarlı olduğundan emin olmak gerekir; eksik kolonlar varsa Pandas otomatik olarak NaN üretir. Bu davranış bazen istenir, bazen de veri kalitesi sorunudur.

pivot_table ile rapor mantığını kurma

Pivotlama, çok sık kullanılan “satır-kolon kırılımında özet tablo” üretimini sağlar. Özellikle segment ve kanal kırılımlarında ortalama gelir, sipariş sayısı gibi metrikler için ideal bir yaklaşımdır.

İki tabloyu anahtar alanla birleştiren akış şeması ve yanında pivot tablo çıktısı, metriklerin kırılımlarla özetlenmesi

GroupBy ile özetleme: metrikler, agregasyon ve doğrulama

DataFrame üzerinde analiz çoğunlukla “kırılıma göre özet” üretmekle ilerler. groupby bu işin merkezindedir: segment bazında gelir, ülke bazında kullanıcı sayısı, kanal bazında dönüşüm gibi metrikleri hızlıca çıkarabilirsiniz.

Temel agregasyon ve çoklu metrik seti

Bir grupta birden fazla metrik hesaplamak için agg kullanılır. Burada isimlendirme ve çıktının okunabilirliği önemli hale gelir; tutarlı bir metrik sözlüğü, raporlamayı standardize eder.

Doğrulama: toplamlara geri dönmek

Özet tablo ürettikten sonra, beklenen toplamlarla kıyaslamak iyi bir kontroldür. Örneğin segmentlere göre kullanıcı sayısı toplamı, filtre sonrası DataFrame satır sayısıyla uyuşuyor mu? Bu tür küçük doğrulamalar, hatalı join veya yanlış filtre gibi sorunları erken yakalar.

Performans ve pratik teknikler: daha hızlı, daha güvenli DataFrame kullanımı

Veri büyüdükçe “çalışıyor” olması yeterli olmaz; makul sürede sonuç almak gerekir. Performans çoğu zaman doğru teknik seçimleriyle gelir: gereksiz kopyalardan kaçınmak, doğru tipleri kullanmak, vektörel işlemleri tercih etmek gibi.

Doğru veri tipleriyle bellek yönetimi

Kategorik sütunlarda category kullanmak ciddi bellek kazancı sağlar. Ayrıca sayısal sütunlarda gereğinden büyük tipler (ör. int64 yerine int32) veri boyutunu şişirebilir. Tip optimizasyonu, özellikle notebook ortamlarında “MemoryError” riskini azaltır.

Chaining yaparken okunabilirliği korumak

Zincirleme akışlar (method chaining) güzel görünse de aşırı uzarsa debug zorlaşır. Bu yüzden akışı mantıksal bloklara ayırmak, kritik ara çıktıları kontrol etmek ve dönüşüm adımlarını net isimlerle belgelemek iyi bir denge sağlar.

Pratik kontrol listesi

  1. Okuma sonrası info() ile tip ve boş değerleri gözden geçir
  2. Anahtar sütunları normalize et (trim, lowercase, tip dönüşümü)
  3. Eksik değer stratejisini iş kuralına göre seç
  4. Join sonrası satır sayısı ve eşleşme oranlarını doğrula
  5. Rapor öncesi temel toplamları karşılaştırarak tutarlılık kontrolü yap

Öğrenmeyi pekiştirmek için önerilen pratik akış

DataFrame öğreniminde en hızlı ilerleme, küçük ama uçtan uca bir akış kurmaktan geçer: dosyadan oku, temizle, dönüştür, özetle, çıktı al. Her adımda bir “neden” eklemek, sonraki bakım ve ekip içi paylaşımda büyük fark yaratır.

Daha sistematik bir yol arıyorsanız, konuyu uygulamalı örneklerle derinleştirmek için Python Veri Analizi Eğitimi içeriği size rehber olabilir. Burada DataFrame ile gerçek veri setleri üzerinde temizleme, dönüşüm, raporlama ve analiz akışlarını daha geniş senaryolarla pekiştirebilirsiniz.

Özetle: Pandas DataFrame, veri dünyasında “ortak dil” haline gelmiş güçlü bir yapı. Doğru indeks ve tiplerle başlamak, temizleme ve dönüşüm adımlarını sistematik yürütmek ve özetleri doğrulamak; güvenilir sonuçlar üretmenin temel taşlarıdır.

 VERİ AKADEMİ