Resim

Python pandas Modülü

Veri Bilimi

Python pandas Modülüne Giriş

pandas, büyük veri kümelerini temizlemek, işlemek, analiz etmek ve manipüle etmek için kullanılan bir kütüphanedir. Excel tablolarının veya SQL tablolarının gücünü Python'a taşır.

1. Kurulum ve Temel Veri Yapıları

pandas da harici bir kütüphanedir ve yaygın olarak pd kısaltmasıyla içe aktarılır.

# Terminalde/Komut Satırında Kurulum
pip install pandas

pandas'ın iki temel veri yapısı vardır:

A. Series (Seriler):

  • Tek boyutlu etiketli dizidir (tek bir sütun gibi düşünülebilir).

B. DataFrame (Veri Çerçeveleri):

  • İki boyutlu etiketli veri yapısıdır (Excel tablosu veya SQL tablosu gibi). Satırlar ve sütunlardan oluşur. pandas'ın kalbidir.

2. DataFrame Oluşturma

Bir veri çerçevesi (DataFrame) oluşturmanın en yaygın yolu, bir Python sözlüğünü (dictionary) kullanmaktır. Sözlüğün anahtarları sütun adları, değerleri ise o sütunun verileri olur.

import pandas as pd

veri = {
    'Isim': ['Ali', 'Ayşe', 'Can', 'Deniz'],
    'Yas': [30, 24, 45, 19],
    'Sehir': ['Ankara', 'İstanbul', 'İzmir', 'Ankara'],
    'Maas': [50000, 65000, 48000, 72000]
}

# DataFrame oluşturma
df = pd.DataFrame(veri)

print("--- Oluşturulan DataFrame ---")
print(df)

Örnek Çıktı:

    Isim  Yas     Sehir   Maas
0    Ali   30    Ankara  50000
1   Ayşe   24  İstanbul  65000
2    Can   45     İzmir  48000
3  Deniz   19    Ankara  72000

3. Veri Çekme ve İnceleme

A. İlk ve Son Kayıtlar

  • .head(n): Veri kümesinin ilk $n$ satırını gösterir (varsayılan $n=5$).

  • .tail(n): Veri kümesinin son $n$ satırını gösterir.

B. Yapısal İnceleme

  • .info(): Sütunların veri tiplerini (dtype) ve boş (non-null) değer sayılarını gösterir.

  • .describe(): Sayısal sütunlar için temel istatistikleri (ortalama, standart sapma, min, max) hesaplar.

print("\n--- Veri İnceleme (describe) ---")
print(df.describe())

C. Sütun Seçimi

  • Sütunlar, sözlük anahtarları gibi seçilir.

# Tek sütun seçimi (Series döndürür)
sehirler = df['Sehir']
print("\n--- Sadece Şehirler (Series) ---")
print(sehirler)

# Birden fazla sütun seçimi (DataFrame döndürür)
isim_ve_maas = df[['Isim', 'Maas']]
print("\n--- İsim ve Maaş (DataFrame) ---")
print(isim_ve_maas)

4. Koşullu Seçim (Filtreleme)

Veriyi belirli kriterlere göre filtrelemek, pandas'ın en güçlü özelliğidir.

# Sadece yaşı 30'dan büyük olanları bul.
filtre = df['Yas'] > 30

# Filtre uygulanmış DataFrame
yasli_kullanicilar = df[filtre]

print("\n--- Yaşı 30'dan Büyük Olanlar ---")
print(yasli_kullanicilar)

# VEYA (Çoklu Koşul) - Mantıksal operatörler için '&' 
# (ve), '|' (veya) kullanılır.
ankara_veya_istanbul = df[(df['Sehir'] == 'Ankara') | 
                            (df['Sehir'] == 'İstanbul')]
print("\n--- Ankara Veya İstanbul'da Yaşayanlar ---")
print(ankara_veya_istanbul)

Veri Temizleme ve Manipülasyonu

Veri temizleme, eksik, hatalı veya tekrarlanan verileri bulup düzeltme sürecidir. pandas bu işlemler için güçlü metotlar sunar.

1. Eksik Veri Tespiti (NaN)

Eksik veriler NaN (Not a Number) olarak temsil edilir.

A. Eksik Değerleri Bulma: .isnull() ve .sum()

  • .isnull(): DataFrame'deki her hücre için, eksikse True, değilse False döndürür.

  • .sum(): Sütun bazında kaç adet eksik değer olduğunu sayar.

import pandas as pd
import numpy as np

# Eksik veriyi simüle eden örnek DataFrame
veri_eksik = {
    'Urun': ['Laptop', 'Mouse', 'Klavye', 'Monitör'],
    'Fiyat': [12000, 150, np.nan, 4500], # Klavye'nin fiyatı eksik
    'Stok': [5, 12, 8, np.nan],       # Monitör'ün stoğu eksik
}
df_eksik = pd.DataFrame(veri_eksik)

print("--- Eksik Değer Sayımı ---")
print(df_eksik.isnull().sum())
# Çıktı:
# Urun     0  (Urun sütununda eksik yok)
# Fiyat    1  (1 tane eksik)
# Stok     1  (1 tane eksik)

2. Eksik Veriyle Başa Çıkma Stratejileri

Eksik verilerle başa çıkmak için iki temel strateji kullanılır:

A. Eksik Satırları Silme: .dropna()

Eksik değere sahip tüm satırı DataFrame'den kaldırır. Veri kaybına yol açabileceği için dikkatli kullanılmalıdır.

# Herhangi bir sütununda (varsayılan: how='any') eksik değer olan 
# satırları sil.
df_silinmis = df_eksik.dropna()

print("\n--- Eksik Satırlar Silindikten Sonra ---")
print(df_silinmis)
# Çıktı: Fiyatı veya stoğu eksik olan satırlar (Klavye, Monitör) 
# silindi.

B. Eksik Değerleri Doldurma: .fillna()

Eksik değerleri, belirli bir sabit değerle veya bir istatistiksel metotla doldurur.

# 1. Sabit Bir Değerle Doldurma
# Eksik stok değerlerini 0 ile doldur.
df_dolduruldu_sabit = df_eksik.fillna({'Stok': 0})
print("\n--- Stok 0 ile Dolduruldu ---")
print(df_dolduruldu_sabit)


# 2. Ortalama (Mean) ile Doldurma (Daha yaygın)
# Eksik fiyat değerlerini Fiyat sütununun ORTALAMASI ile doldur.
# Ortalama hesaplanır: (12000+150+4500)/3
ortalama_fiyat = df_eksik['Fiyat'].mean() df_dolduruldu_ortalama = df_eksik['Fiyat'].fillna(ortalama_fiyat) # Orijinal DataFrame'deki Fiyat sütununu güncelleriz df_eksik['Fiyat'] = df_dolduruldu_ortalama print("\n--- Fiyat Ortalamayla Dolduruldu ---") print(df_eksik)

3. Tekrarlanan Kayıtlarla Başa Çıkma

Bazen veri setinde tamamen aynı olan satırlar (duplikatlar) bulunur.

  • .duplicated(): Her satır için, kendisinden önce aynı satır varsa True döndürür.

  • .drop_duplicates(): Tekrarlanan satırları (varsayılan olarak ilk tekrarı tutarak) siler.

# Duplikatları simüle edelim (Ali'yi tekrar ekleyelim)
veri_duplikat = {'Isim': ['Ali', 'Ayşe', 'Ali'], 'Yas': [30, 24, 30]}
df_duplikat = pd.DataFrame(veri_duplikat)

print("\n--- Tekrarlanan Satır Sayımı ---")
print(df_duplikat.duplicated().sum()) # Çıktı: 1 (İkinci 'Ali' kaydı)

# Tekrarlananları sil (ilk 'Ali' kalır, ikinci 'Ali' silinir)
df_temiz = df_duplikat.drop_duplicates()

print("\n--- Tekrarlananlar Silindi ---")
print(df_temiz)

Veri Dönüştürme ve Manipülasyonu

Bu aşamada, pandas'ın mevcut sütunları kullanarak yeni sütunlar oluşturma, veriye toplu fonksiyonlar uygulama ve veriyi gruplandırma yeteneklerini inceleyeceğiz.

1. Yeni Sütun Oluşturma

En temel manipülasyon şekli, mevcut sütunlar üzerinde aritmetik işlemler yaparak yeni bir sütun eklemektir.

import pandas as pd
import numpy as np
# Önceki konudan temizlenmiş ve doldurulmuş veriyi kullanalım
veri = {
    'Isim': ['Ali', 'Ayşe', 'Can', 'Deniz'],
    'Maas_TL': [50000, 65000, 48000, 72000],
    'Tecrube_Yil': [5, 2, 10, 1]
}
df = pd.DataFrame(veri)
# Yeni Sütun 1: Maaşın 12 katı (Yıllık Maaş)
df['Yillik_Maas'] = df['Maas_TL'] * 12
# Yeni Sütun 2: Maaşın tecrübe yılına oranı (Maas Verimliliği)
df['Maas_Verimlilik'] = df['Maas_TL'] / df['Tecrube_Yil']
print("--- Yeni Sütunlar Oluşturuldu ---")
print(df)

Örnek Çıktı:

    Isim  Maas_TL  Tecrube_Yil  Yillik_Maas  Maas_Verimlilik
0    Ali    50000            5       600000         10000.00
1   Ayşe    65000            2       780000          32500.00
2    Can    48000           10       576000          4800.00
3  Deniz    72000            1       864000          72000.00

2. Sütunlara Fonksiyon Uygulama: .apply()

Bazen standart aritmetik işlemler yeterli olmaz. Daha karmaşık bir mantık (örneğin bir dizeyi dönüştürme veya koşullu değer atama) uygulamak için .apply() metodu kullanılır.

# Amaç: Maaşın 60000 TL'den büyük olup olmadığını gösteren bir 
# sütun oluşturmak.
def maas_durumu_belirle(maas):
    if maas > 60000:
        return 'Yüksek'
    else:
        return 'Standart'

# .apply() metodu ile 'Maas_TL' sütunundaki her değere fonksiyonu 
# uygula
df['Maas_Durumu'] = df['Maas_TL'].apply(maas_durumu_belirle)

print("\n--- .apply() ile Koşullu Yeni Sütun ---")
print(df[['Isim', 'Maas_TL', 'Maas_Durumu']])

Örnek Çıktı:

    Isim  Maas_TL Maas_Durumu
0    Ali    50000    Standart
1   Ayşe    65000      Yüksek
2    Can    48000    Standart
3  Deniz    72000      Yüksek

3. Veri Gruplandırma ve Özetleme: .groupby()

Veri analizi için en güçlü araçlardan biridir. Veriyi bir veya daha fazla sütuna göre gruplar ve her grup için toplu istatistikler (toplam, ortalama, sayım, vb.) hesaplar. SQL'deki GROUP BY komutuna benzer.

# Grubu simüle etmek için Sehir verisini ekleyelim
df['Sehir'] = ['Ankara', 'İstanbul', 'İzmir', 'İstanbul']
# 1. Şehirlere göre grupla
gruplanmis_sehir = df.groupby('Sehir')
# 2. Her grubun ortalama maaşını hesapla
ortalama_maas = gruplanmis_sehir['Maas_TL'].mean()
print("\n--- .groupby() ile Ortalama Maaşlar ---")
print(ortalama_maas)

Örnek Çıktı:

Sehir
Ankara      50000.0
İstanbul    68500.0 # (65000 + 72000) / 2
İzmir       48000.0
Name: Maas_TL, dtype: float64

Yorumlar

Bu blogdaki popüler yayınlar

Python random Modülü

Python print()

Yazılım Nedir?