0Pricing
Pandas & NumPy Academy · Ders

Eksik Değerleri Doldurma

fillna() ve method parametresini kullanarak NaN değerlerini sabit bir değerle, sütun ortalamasıyla, ileriye veya geriye doğru doldurmayla değiştirin.

Eksik Değerleri Doldurma, CoddyKit'te ücretsiz bir Pandas & NumPy Academy dersidir. Bu, 4 dersinin 3. 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.

fillna() İşlevine Giriş

Atama, satırı kaldırmak yerine eksik değerleri makul bir ikameyle değiştirmek anlamına gelir. Pandas'ta fillna() bunun temel aracıdır: bir Series veya DataFrame içindeki her NaN değerini belirttiğiniz değerle değiştirir. Kaldırmanın aksine atama tüm satırları korur; bu, özellikle verinin az olduğu veya eksik veri örüntüsünün bilgi taşıdığı durumlarda önemlidir.

En basit kullanımda bir skaler iletilir: df['col'].fillna(0).

import pandas as pd
import numpy as np

df = pd.DataFrame({
    'product': ['A', 'B', 'C', 'D'],
    'price': [10.0, np.nan, 30.0, np.nan]
})

# Fill all NaN in 'price' with 0
filled = df['price'].fillna(0)
print(filled)
# 0    10.0
# 1     0.0
# 2    30.0
# 3     0.0

Sütun Ortalaması veya Medyanıyla Doldurma

Sütunu mean ile (simetrik dağılımlar için) veya median ile (çarpık dağılımlar için) doldurmak, en yaygın atama stratejilerinden biridir. Bu istatistikler verinin merkezi eğilimini temsil eder; böylece sütunun dağılımındaki bozulmayı en aza indirir. Veri sızıntısını önlemek için istatistiği her zaman eğitim bölümünde hesaplayın.

import pandas as pd
import numpy as np

df = pd.DataFrame({
    'salary': [50000, np.nan, 70000, 80000, np.nan, 60000]
})

mean_salary = df['salary'].mean()
median_salary = df['salary'].median()

df['salary_mean_filled'] = df['salary'].fillna(mean_salary)
df['salary_median_filled'] = df['salary'].fillna(median_salary)
print(df)
#     salary  salary_mean_filled  salary_median_filled
# 0  50000.0             50000.0               50000.0
# 1      NaN             65000.0               65000.0
# 2  70000.0             70000.0               70000.0

Kategorik Değerleri Mode ile Doldurma

Kategorik sütunlar için mean veya median ile doldurmak anlamlı değildir. Bunun yerine mode kullanın; bu, en sık görülen değerdir. Series.mode()[0] en yaygın değeri döndürür ([0], birden çok mode bulunması durumunu ele alır).

import pandas as pd
import numpy as np

df = pd.DataFrame({
    'status': ['active', 'inactive', None, 'active', None, 'active']
})

most_common = df['status'].mode()[0]
print('Mode:', most_common)  # active

df['status'] = df['status'].fillna(most_common)
print(df['status'].tolist())
# ['active', 'inactive', 'active', 'active', 'active', 'active']

ffill() ile İleriye Doğru Doldurma

İleriye doğru doldurma (son gözlemin ileriye taşınması, LOCF olarak da adlandırılır), son geçerli (NaN olmayan) değeri sonraki NaN konumlarını doldurmak üzere ileri taşır. Bir ölçümün güncellenene kadar sabit kaldığı zaman serisi verileri için idealdir; örneğin yalnızca belirli olaylarda değişen cihaz durumu, fiyat düzeyleri veya sensör okumaları.

import pandas as pd
import numpy as np

price = pd.Series(
    [100, np.nan, np.nan, 105, np.nan, 110],
    index=pd.date_range('2024-01', periods=6, freq='ME')
)

filled = price.ffill()
print(filled)
# 2024-01-31    100.0
# 2024-02-29    100.0
# 2024-03-31    100.0
# 2024-04-30    105.0
# 2024-05-31    105.0
# 2024-06-30    110.0

bfill() ile Geriye Doğru Doldurma

Geriye doğru doldurma (next-observation-carried-backward, NOCB), önceki NaN konumlarını doldurmak için bir sonraki geçerli değeri geriye doğru taşır. Bu yöntem, gelecekteki verilerin geçmişteki eksik değerleri tamamladığını bildiğiniz durumlarda kullanışlıdır; örneğin ay sonu verilerini alıyor ve rapor gelmeden önce o aydaki günleri geriye doğru doldurmanız gerekiyorsa.

import pandas as pd
import numpy as np

df = pd.DataFrame({'value': [np.nan, np.nan, 3, np.nan, 5]})

print(df['value'].bfill())
# 0    3.0
# 1    3.0
# 2    3.0
# 3    5.0
# 4    5.0
# dtype: float64

İleriye ve Geriye Doğru Doldurma için limit Parametresi

Hem ffill() hem de bfill(), art arda gelen kaç NaN değerinin doldurulacağını sınırlayan bir limit parametresini kabul eder. Bu, bir değeri yalnızca kısa bir boşluk boyunca ileri taşımak istediğinizde önemlidir; uzun boşluklar, verilerin yalnızca gecikmediğini ve gerçekten eksik olduğunu göstermek için NaN olarak kalmalıdır.

import pandas as pd
import numpy as np

s = pd.Series([1.0, np.nan, np.nan, np.nan, 5.0])

# Fill only the first NaN gap, leave the rest
print(s.ffill(limit=1))
# 0    1.0
# 1    1.0   <- filled
# 2    NaN   <- still NaN (limit reached)
# 3    NaN
# 4    5.0

Farklı Sütunları Farklı Şekillerde Doldurma

Gerçek bir DataFrame içindeki farklı sütunlar, farklı doldurma stratejileri gerektirebilir. Sütun adlarını anahtar, doldurma değerlerini ise değer olarak içeren bir sözlük değerini fillna() işlevine aktarın. Bu işlem, tek bir çağrıda sütuna özel eksik değer ataması uygular ve birden çok ayrı fillna çağrısını art arda kullanmaktan daha düzenlidir.

import pandas as pd
import numpy as np

df = pd.DataFrame({
    'age': [25, np.nan, 30],
    'income': [50000, np.nan, 70000],
    'country': ['USA', np.nan, 'UK']
})

fill_values = {
    'age': df['age'].median(),
    'income': df['income'].mean(),
    'country': 'Unknown'
}

filled = df.fillna(fill_values)
print(filled)
#     age   income  country
# 0  25.0  50000.0      USA
# 1  27.5  60000.0  Unknown
# 2  30.0  70000.0       UK

Grupları Dikkate Alan Eksik Değer Atama

Daha gelişmiş bir strateji, NaN değerlerini genel sütun ortalaması yerine grup ortalaması veya medyanı ile doldurmaktır. Örneğin eksik bir maaşı, ilgili iş kategorisindeki maaşların medyanıyla doldurabilirsiniz. Bu yaklaşım alt grup yapısını korur ve genel bir istatistiğe göre daha gerçekçi eksik değerler üretir.

import pandas as pd
import numpy as np

df = pd.DataFrame({
    'dept': ['Eng', 'Eng', 'HR', 'HR', 'Eng'],
    'salary': [90000, np.nan, 50000, np.nan, 110000]
})

# Fill salary NaN with the median salary for each department
df['salary'] = df.groupby('dept')['salary'].transform(
    lambda x: x.fillna(x.median())
)
print(df)
#    dept   salary
# 0   Eng  90000.0
# 1   Eng  100000.0   <- group median (90k+110k)/2
# 2    HR  50000.0
# 3    HR  50000.0
# 4   Eng  110000.0

Sabit Bir Gösterge Değeriyle Doldurma

Bazen doğru eksik değer ataması, gerçek bir ölçümü değil, 'bilinmiyor' durumunu belirten bir gösterge değeri kullanmaktır. Örneğin bilinmeyen yaş için -1, bilinmeyen kategori için 'N/A' veya bilinmeyen bir mantıksal bayrak için False kullanılabilir. Gösterge değerleri, sonraki kod bunları açıkça kontrol ediyor ve gerçek verilerden farklı şekilde ele alıyorsa geçerlidir.

import pandas as pd
import numpy as np

df = pd.DataFrame({
    'user_id': [1, 2, 3],
    'referral_source': ['email', np.nan, 'ad'],
    'trial_days': [14, np.nan, 7]
})

df['referral_source'] = df['referral_source'].fillna('unknown')
df['trial_days'] = df['trial_days'].fillna(-1).astype(int)
print(df)
#    user_id referral_source  trial_days
# 0        1           email          14
# 1        2         unknown          -1
# 2        3              ad           7

Bir Pipeline içinde fillna() Çağrılarını Zincirleme

Tüm Pandas yöntemleri gibi fillna() da yeni bir DataFrame döndürür ve bir yöntem zincirine sorunsuzca eklenebilir. dropna() sonrasında .fillna() çağırmak iki aşamalı bir strateji uygular: kritik sütunları eksik olan satırları siler, ardından kalan isteğe bağlı NaN değerlerini makul varsayılanlarla doldurur; üstelik tüm bunları okunabilir tek bir işlem hattında gerçekleştirir.

import pandas as pd
import numpy as np

df = pd.DataFrame({
    'user_id': [1, None, 3, 4],
    'score': [88, 95, np.nan, 76],
    'label': ['A', 'B', None, 'D']
})

cleaned = (
    df
    .dropna(subset=['user_id'])
    .fillna({'score': df['score'].mean(), 'label': 'Unknown'})
)
print(cleaned)
#    user_id  score    label
# 0      1.0   88.0        A
# 2      3.0   86.3  Unknown
# 3      4.0   76.0        D

Hiç NaN Kalmadığını Doğrulama

Eksik değer atamasından sonra, hedeflediğiniz sütunlarda hiç NaN kalmadığını her zaman doğrulayın. df.isna().sum() çağrısını kullanın veya sayının sıfır olduğunu doğrulayın. Beklenmeyen sıfır olmayan bir sayı, fillna işleminizin bir durumu ele almadığını gösterir; örneğin bir sütunun dtype değeri doldurmayı engellemiş ya da sözlüğünüze bir sütun eklemeyi unutmuş olabilirsiniz.

import pandas as pd
import numpy as np

df = pd.DataFrame({'a': [1.0, np.nan, 3.0], 'b': [np.nan, 2.0, 3.0]})
filled = df.fillna(0)

# Verify
assert filled.isna().sum().sum() == 0, 'Some NaN remain!'
print('All NaN filled successfully')
print(filled.isna().sum())
# a    0
# b    0
# dtype: int64

Hızlı Kontrol

Pandas'te eksik değerleri doldurma konusundaki anlayışınızı sınayın.

Ders Özeti

Bu derste şunları öğrendiniz: fillna(scalar) tüm NaN değerlerini bir sabitle değiştirir, fillna(mean/median) sütun istatistikleriyle eksik değer ataması yapar ve ffill()/bfill() zaman serilerinde bitişik değerleri taşır. Sütuna özel stratejiler için fillna() işlevine bir sözlük aktarın; grupları dikkate alan eksik değer ataması için groupby().transform() kullanın. Sırada, enterpolasyonu ve gelişmiş eksik değer atama tekniklerinin ne zaman seçileceğini ele alacağız.

Sıkça Sorulan Sorular

“Eksik Değerleri Doldurma” dersi ücretsiz mi?

Evet — “Eksik Değerleri Doldurma” 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.

“Eksik Değerleri Doldurma” dersinde ne öğreneceğim?

fillna() ve method parametresini kullanarak NaN değerlerini sabit bir değerle, sütun ortalamasıyla, ileriye veya geriye doğru doldurmayla değiştirin. 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 3. dersidir.

“Eksik Değerleri Doldurma” 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

  1. Eksik Değerleri Belirleme
  2. Eksik Değerleri Kaldırma
  3. Eksik Değerleri Doldurma
  4. Enterpolasyon ve İleri Düzey Atama
← Pandas & NumPy Academy Sayfasına Dön