Pandas & NumPy Academy · Ders

İndeks Hizalama ve Yeniden İndeksleme

İki DataFrame'i reindex() ile ortak bir indekse hizalayın, eksik etiketleri doldurun ve aritmetik işlemlerin indeksleri nasıl hizaladığını öğrenin.

3. ders / 413 adım

İndeks Hizalama ve Yeniden İndeksleme, 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.

Pandas Dizinleri Nasıl Hizalar

Pandas'ın en güçlü ve bazen şaşırtıcı davranışlarından biri otomatik dizin hizalamasıdır. İki Series veya DataFrame'i topladığınızda, çıkardığınızda ya da başka bir şekilde birleştirdiğinizde Pandas, işlemi gerçekleştirmeden önce bunları dizin etiketlerine göre hizalar. Eşleşen etiketler üzerinde işlem yapılır; eşleşmeyen etiketler NaN üretir. Bu, hizalanmamış verilerden kaynaklanan sessiz hataları önler ve farklı kaynaklardan gelen verileri önce elle sıralamaya veya yeniden düzenlemeye gerek kalmadan güvenle birleştirmenizi sağlar.

import pandas as pd

s1 = pd.Series([10, 20, 30], index=['a', 'b', 'c'])
s2 = pd.Series([1, 2, 3], index=['b', 'c', 'd'])

# Alignment in action: a→NaN, d→NaN
result = s1 + s2
print('s1 + s2 with automatic alignment:')
print(result)

Hizalanmamış Dizinlerden Kaynaklanan NaN

Dizin etiketleri eşleşmediğinde Pandas, eksik girdileri NaN ile doldurur. Bu kasıtlıdır: 'işlenenlerden birinde buna karşılık gelen bir değer yoktu' anlamına gelir. İki Series veya DataFrame arasındaki aritmetiğin sonucunu beklenmeyen NaN değerleri açısından her zaman inceleyin — bunlar dizinlerin hizalanmadığını gösterir. Eksik hizalanmış değerleri NaN yaymak yerine sıfır olarak değerlendirmek için aritmetik yönteminde fill_value=0 kullanın (s1.add(s2, fill_value=0)).

import pandas as pd

s1 = pd.Series({'a': 10, 'b': 20, 'c': 30})
s2 = pd.Series({'b': 1, 'c': 2, 'd': 3})

# Default: NaN where labels don't match
print('Default (NaN for unmatched):')
print(s1 + s2)

# fill_value=0: treat missing as zero
print('\nWith fill_value=0:')
print(s1.add(s2, fill_value=0))

DataFrame Aritmetiğinde Hizalama

İki DataFrame birleştirildiğinde hizalama hem satırlara hem de sütunlara uygulanır. Sonuç, her iki dizin kümesinin ve her iki sütun kümesinin birleşimini içerir; DataFrame'lerden herhangi birinde değer bulunmayan yerlerde NaN bulunur. Bu, aynı anda dizinler ve sütunlar üzerinde yapılan tam dış birleştirmeye eşdeğerdir. Böylece farklı mali dönemlere ait DataFrame'leri güvenle toplayabilirsiniz — yalnızca birinde bulunan aylar için NaN oluşur; bunları daha sonra doldurabilir veya kaldırabilirsiniz.

import pandas as pd

df1 = pd.DataFrame({'revenue': [100, 200], 'cost': [80, 150]}, index=['Jan', 'Feb'])
df2 = pd.DataFrame({'revenue': [120, 210], 'headcount': [5, 6]}, index=['Feb', 'Mar'])

result = df1 + df2
print('Combined DataFrame (union of index and columns):')
print(result)

reindex() Yöntemi

df.reindex(new_index), new_index etiket listesine uyarlanmış yeni bir DataFrame döndürür. Hem özgün dizinde hem de yeni dizinde bulunan etiketler korunur; new_index içinde olup özgün dizinde bulunmayan etiketler NaN alır; özgün dizinde olup new_index içinde bulunmayan etiketler kaldırılır. Bu, işlemleri gerçekleştirmeden önce bir DataFrame'i hedef etiket kümesine hizalamanın açık yoludur.

import pandas as pd

s = pd.Series({'a': 10, 'b': 20, 'c': 30})

# Reindex to a new label set
reindexed = s.reindex(['b', 'c', 'd', 'e'])
print('Original:', s.index.tolist())
print('New index: [b, c, d, e]')
print('\nReindexed Series:')
print(reindexed)
# b, c preserved; d, e → NaN; a dropped

Dizinleme Sonrasında Eksik Değerleri Doldurma

reindex(), yeni etiketler için bir sabitin yerine konmasını sağlayan fill_value parametresini ve ileriye doğru doldurma ('ffill') ya da geriye doğru doldurma ('bfill') için bir method parametresini kabul eder. Bu doldurma yöntemleri, bir Series'i eksiksiz bir tarih aralığına göre yeniden dizinlediğiniz ve eksik günlerin NaN yerine bilinen son değerle doldurulmasını istediğiniz zaman serisi verilerinde özellikle kullanışlıdır.

import pandas as pd

# Sparse daily data with gaps
s = pd.Series(
    [10, 20, 30],
    index=pd.to_datetime(['2024-01-01', '2024-01-03', '2024-01-07'])
)

# Reindex to complete date range
full_range = pd.date_range('2024-01-01', '2024-01-07')
print('Forward fill (carry last known value):')
print(s.reindex(full_range, method='ffill'))

print('\nFill with 0:')
print(s.reindex(full_range, fill_value=0))

Sütunları Yeniden Dizinleme

reindex sütunlarda da çalışır: df.reindex(columns=['col1', 'col2', 'new_col']). Özgün DataFrame'de bulunmayan yeni sütunlar NaN değerleriyle eklenir. Yeni listede bulunmayan mevcut sütunlar kaldırılır. Bu, farklı kaynaklardan gelen ve sütun kümeleri tutarsız olabilen birden fazla DataFrame arasında standart sütun şemasını zorunlu kılmak için kullanışlıdır.

import pandas as pd

df = pd.DataFrame({
    'name': ['Alice', 'Bob'],
    'age': [30, 25],
    'city': ['NY', 'LA']
})

# Enforce a canonical column order and add missing columns
canonical_cols = ['name', 'age', 'email', 'city', 'country']
df_reindexed = df.reindex(columns=canonical_cols)
print(df_reindexed)
# 'email' and 'country' are new → NaN

İki Nesneyi Eşzamanlamak İçin align() Kullanma

s1.align(s2), join parametresine bağlı olarak (birleşim veya kesişim) aynı dizine sahip iki yeni nesne döndürür ve bunları elemana göre işlemlere hazırlar. Bu, her iki nesneyi aynı etiket kümesine aynı anda yeniden dizinlemeye eşdeğerdir. Yalnızca ortak etiketleri korumak için join='inner', her iki nesnedeki tüm etiketleri korumak ve eşleşmeyen yerlere NaN koymak için (varsayılan) join='outer' kullanın.

import pandas as pd

s1 = pd.Series({'a': 10, 'b': 20, 'c': 30})
s2 = pd.Series({'b': 1, 'c': 2, 'd': 3})

# Align to common labels only (inner join)
s1_aligned, s2_aligned = s1.align(s2, join='inner')
print('Inner-aligned s1:')
print(s1_aligned)
print('Inner-aligned s2:')
print(s2_aligned)

print('\nProduct on common labels:')
print(s1_aligned * s2_aligned)

merge ile Aritmetikte Hizalama Karşılaştırması

Pandas, DataFrame'leri birleştirmek için iki yaklaşım sunar: merge/join (SQL tarzı, açık anahtar eşleştirme) ve dizin hizalamalı aritmetik (örtük, etiket tabanlı). Açık anahtar sütunları olan yapılandırılmış tabloları birleştirirken merge kullanın. Doğal olarak aynı dizini paylaşması gereken DataFrame'ler arasında hesaplama yaparken aritmetik hizalamayı kullanın — örneğin her ikisi de (bölge, ay) temelinde dizinlenmiş bir maliyet DataFrame'ini gelir DataFrame'inden çıkarmak gibi.

import pandas as pd

# Two DataFrames sharing the same index
revenue = pd.Series({'North': 500, 'South': 300, 'East': 450})
costs = pd.Series({'North': 350, 'South': 280, 'West': 400})

# Automatic alignment: 'East' and 'West' don't match → NaN
profit = revenue - costs
print('Profit by region:')
print(profit)

# If you want only common regions
profit_inner = revenue.align(costs, join='inner')[0] - revenue.align(costs, join='inner')[1]
print('\nProfit (common regions only):')
print(profit_inner)

İşlemlerden Önce Dizin Eşitliğini Denetleme

İki DataFrame üzerinde işlem gerçekleştirmeden önce (df1.index == df2.index).all() ile dizinlerinin eşleşip eşleşmediğini denetleyin. Dizinler yalnızca sıralama bakımından farklıysa karşılaştırmadan önce ikisini de sıralayın. Farklı kaynaklardan yüklenen DataFrame'ler için, yanlışlıkla NaN yayılmasını önlemek amacıyla aritmetikten önce açıkça hizalama veya yeniden dizinleme yapmak iyi bir uygulamadır. Tüm hizalama varsayımlarını açıklamalarda veya veri işleme hattı günlüklerinde belgeleyin.

import pandas as pd

df1 = pd.DataFrame({'sales': [100, 200, 300]}, index=['Q1', 'Q2', 'Q3'])
df2 = pd.DataFrame({'cost': [80, 160, 240]}, index=['Q1', 'Q2', 'Q3'])

# Check index equality
if (df1.index == df2.index).all():
    print('Indices match — safe to combine.')
    combined = pd.concat([df1, df2], axis=1)
    combined['profit'] = combined['sales'] - combined['cost']
    print(combined)
else:
    print('Indices differ — align before combining!')

Uygulamalı Desen: Biçimleri Standartlaştırma

Birden fazla dosyadan veya API çağrısından veri yüklerken yaygın bir desen, her toplu işlemin farklı bir anahtar alt kümesini kapsamasıdır. Birleştirmeden veya toplulaştırmadan önce tüm toplu işlemleri fill_value=0 ile bilinen anahtar alanının tamamına göre yeniden dizinleyin. Böylece işlemlerden önce her toplu işlem aynı biçime (aynı dizin ve aynı sütunlara) sahip olur ve yanlış toplulaştırılmış sonuçlara yol açan sessiz biçim uyuşmazlıkları önlenir.

import pandas as pd

# Two sales batches with different product sets
batch1 = pd.Series({'laptop': 50, 'phone': 80, 'tablet': 30})
batch2 = pd.Series({'phone': 90, 'tablet': 40, 'headphones': 60})

# Full product catalogue
all_products = ['laptop', 'phone', 'tablet', 'headphones']

# Standardise both to the full catalogue
b1 = batch1.reindex(all_products, fill_value=0)
b2 = batch2.reindex(all_products, fill_value=0)

total = b1 + b2
print('Total sales per product:')
print(total)

Dizin Hizalamasında Uç Durumlar

İki önemli uç durum vardır: Yinelenen etiketler — her iki Series de yinelenen dizin etiketlerine sahipse hizalama, çok sayıda NaN değeri içeren Kartezyen çarpım benzeri bir genişlemeye yol açar (Pandas hangi yinelenenlerin birbirine karşılık geldiğini varsaymaz). Aritmetik hizalamadan önce dizinlerin benzersiz olduğundan her zaman emin olun. Tamsayı ve nesne dizinleri — bir RangeIndex(0,5) ile bir Int64Index([0,1,2,3,4]), biri çıkarımsal, diğeri açıkça belirtilmiş olduğu için işlemlerden sonra kusursuz biçimde hizalanmayabilir. Normalleştirmek için reset_index(drop=True) kullanın.

import pandas as pd

# Duplicate label alignment — produces unexpected expansion
s1 = pd.Series([1, 2, 3], index=['a', 'a', 'b'])
s2 = pd.Series([10, 20], index=['a', 'b'])

result = s1 + s2
print('Result with duplicate indices (unexpected expansion):')
print(result)
print('\nAlways ensure unique indices before arithmetic!')

Kısa Kontrol

Bu dersten dizin hizalama ve yeniden dizinleme anlayışınızı test edin.

Ders Özeti

Bu derste şunları öğrendiniz: Pandas aritmetik işlemlerde otomatik dizin hizalaması yapar ve eşleşmeyen etiketler için NaN üretir; reindex(), eksik etiketler için doldurma seçenekleriyle bir DataFrame'i hedef etiket kümesine uyarlar; align() ise iki nesneyi aynı dizine eşzamanlı olarak hizalar. Sırada, sıralanmış dizinlerin performans avantajlarını ve bunları timeit ile nasıl ölçeceğinizi inceleyeceğiz.

Başlamak ücretsiz

Yapay zeka eğitmeniyle Python öğren — ücretsiz

Tarayıcında gerçek kod yaz ve çalıştır, 7/24 yapay zeka eğitmeninden anında yardım al; web'de ya da uygulamada kaldığın yerden devam et.

Kurslar
30
Dersler
120

Sıkça Sorulan Sorular

“İndeks Hizalama ve Yeniden İndeksleme” dersi ücretsiz mi?

Evet — “İndeks Hizalama ve Yeniden İndeksleme” 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.

“İndeks Hizalama ve Yeniden İndeksleme” dersinde ne öğreneceğim?

İki DataFrame'i reindex() ile ortak bir indekse hizalayın, eksik etiketleri doldurun ve aritmetik işlemlerin indeksleri nasıl hizaladığını öğrenin. 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.

“İndeks Hizalama ve Yeniden İndeksleme” 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. MultiIndex Oluşturma
  2. MultiIndex'ten Veri Seçme
  3. İndeks Hizalama ve Yeniden İndeksleme
  4. Sıralı İndekslerin Performans Faydaları
← Pandas & NumPy Academy Sayfasına Dön