Pandas & NumPy Academy · Ders

pd.merge: İç ve Dış Birleştirmeler

İki DataFrame'i ortak bir anahtar sütununda iç ve dış birleştirmeler kullanarak birleştirin ve hangi satırların korunduğunu ya da kaldırıldığını öğrenin.

2. ders / 413 adım

pd.merge: İç ve Dış Birleştirmeler, CoddyKit'te ücretsiz bir Pandas & NumPy Academy dersidir. Bu, 4 dersinin 2. 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.

Birleştirme nedir?

Birleştirme, ortak bir anahtar sütununa göre satırları eşleştirerek iki DataFrame'i bir araya getirir — SQL'deki JOIN yan tümcesiyle aynı kavramdır. Pandas, birleştirmeleri pd.merge() üzerinden uygular. Verileri yalnızca üst üste getiren pd.concat() işlevinin aksine pd.merge(), bir veya daha fazla sütundaki eşleşen değerlere göre iki farklı tablodaki satırları akıllıca hizalar.

Ortak anahtar sütunu

Birleştirmenin çalışması için her iki DataFrame'de de ortak değerlere sahip en az bir sütun, yani anahtar sütunu bulunmalıdır. Örneğin orders tablosunda bir customer_id sütunu, customers tablosunda da bir customer_id sütunu vardır. customer_id üzerinden birleştirme yapmak, müşteri ayrıntılarını her sipariş satırına ekler. Her iki DataFrame aynı sütun adını paylaşıyorsa anahtarı on parametresiyle belirtin.

import pandas as pd

orders = pd.DataFrame({
    'order_id': [1, 2, 3, 4],
    'customer_id': [101, 102, 101, 103],
    'amount': [250, 80, 320, 150]
})

customers = pd.DataFrame({
    'customer_id': [101, 102, 104],
    'name': ['Alice', 'Bob', 'Diana']
})

İç birleştirme: iki tablonun kesişimi

İç birleştirme (varsayılan), yalnızca anahtar değerinin her iki DataFrame'de de bulunduğu satırları tutar. Tablolardan birinde bulunup diğerinde eşleşen anahtarı olmayan satırlar sessizce kaldırılır. Sipariş örneğinde 103 ve 104 numaralı müşterilerin diğer tabloda eşleşmesi yoktur; bu nedenle satırları iç birleştirme sonucuna dahil edilmez.

# Inner join (default): only matching rows from both
result = pd.merge(orders, customers, on='customer_id', how='inner')
print(result)
#    order_id  customer_id  amount   name
# 0         1          101     250  Alice
# 1         3          101     320  Alice
# 2         2          102      80    Bob
# Order 4 (customer 103) dropped - no match in customers
# Diana (customer 104) dropped - no match in orders

Dış birleştirme: iki tablonun birleşimi

Dış birleştirme (how='outer'), her iki DataFrame'deki tüm satırları tutar. Bir satırın diğer tabloda eşleşen anahtarı yoksa eksik sütunlar NaN ile doldurulur. Bu, eşleşme bulamayan kayıtları da koruyarak her iki veri kümesinin eksiksiz bir görünümünü elde etmek istediğinizde kullanışlıdır.

result = pd.merge(orders, customers, on='customer_id', how='outer')
print(result)
#    order_id  customer_id  amount   name
# 0       1.0          101   250.0  Alice
# 1       3.0          101   320.0  Alice
# 2       2.0          102    80.0    Bob
# 3       4.0          103   150.0    NaN  <- order with unknown customer
# 4       NaN          104     NaN  Diana  <- customer with no orders

Farklı adlara sahip sütunlarda birleştirme

Anahtar sütununun her DataFrame'de farklı bir adı varsa on yerine left_on ve right_on kullanın. Pandas, sol DataFrame'deki left_on değerinin sağ DataFrame'deki right_on değerine eşit olduğu satırları eşleştirir. Her iki anahtar sütunu da sonuçta görünür; sonrasında yinelenen olanı kaldırabilirsiniz.

products = pd.DataFrame({
    'prod_id': [10, 20, 30],
    'name': ['Widget', 'Gadget', 'Doohickey']
})

order_lines = pd.DataFrame({
    'item_id': [10, 10, 20],
    'qty': [3, 1, 5]
})

result = pd.merge(order_lines, products,
                  left_on='item_id', right_on='prod_id')
print(result.drop(columns='prod_id'))
#    item_id  qty    name
# 0       10    3  Widget
# 1       10    1  Widget
# 2       20    5  Gadget

Birden çok sütunda birleştirme

Satırları bir sütun birleşimine (bileşik anahtara) göre eşleştirmek için on parametresine bir liste iletin. Bu, tek bir sütunun benzersiz bir eşleşme için yeterli olmadığı durumlarda yaygındır; örneğin hem year hem de region üzerinden birleştirme yapmak gibi. Bir satırın sonuca dahil edilmesi için listelenen tüm sütunların aynı anda eşleşmesi gerekir.

targets = pd.DataFrame({
    'year': [2023, 2023, 2024],
    'region': ['East', 'West', 'East'],
    'target': [100, 150, 120]
})
actuals = pd.DataFrame({
    'year': [2023, 2024, 2024],
    'region': ['East', 'East', 'West'],
    'actual': [95, 115, 80]
})

result = pd.merge(targets, actuals, on=['year', 'region'], how='inner')
print(result)
#    year region  target  actual
# 0  2023   East     100      95
# 1  2024   East     120     115

Çakışan sütun adlarını ele alma

Her iki DataFrame de anahtar dışındaki aynı ada sahip bir sütun içerdiğinde, Pandas bunları ayırt etmek için sonekler ekler. Varsayılanlar soldaki için _x, sağdaki için _y şeklindedir. Daha anlamlı adlar oluşturmak ve sonuçtaki karışıklığı önlemek için bunları suffixes parametresiyle özelleştirebilirsiniz.

df_a = pd.DataFrame({'id': [1, 2], 'value': [10, 20]})
df_b = pd.DataFrame({'id': [1, 2], 'value': [100, 200]})

# Default suffixes
print(pd.merge(df_a, df_b, on='id'))
#    id  value_x  value_y

# Custom suffixes
print(pd.merge(df_a, df_b, on='id', suffixes=('_budget', '_actual')))
#    id  value_budget  value_actual

Beklenmeyen Yinelenenleri Denetleme

Yaygın bir birleştirme sorunu, beklenmeyen satır çoğalmasıdır. Anahtar sütununda her iki DataFrame içinde de yinelenen değerler varsa birleştirme, eşleşen tüm satırların kartezyen çarpımını üretir. Birleştirme sonrasında satır sayısını her zaman denetleyin: beklediğinizden fazlaysa df.duplicated(subset=['key']).sum() ile anahtar sütunundaki yinelemeleri araştırın.

# Both tables have duplicate keys -> cartesian product
left = pd.DataFrame({'id': [1, 1], 'val_l': ['a', 'b']})
right = pd.DataFrame({'id': [1, 1], 'val_r': ['x', 'y']})

result = pd.merge(left, right, on='id')
print(len(result))  # 4 rows! (2x2 cartesian product)
print(result)
#    id val_l val_r
# 0   1     a     x
# 1   1     a     y
# 2   1     b     x
# 3   1     b     y

Güvenlik için validate Parametresi

Birleştirme üzerindeki ilişki kısıtlarını zorunlu kılmak ve bunlar ihlal edilirse hata oluşturmak için validate parametresini geçirin. 'one_to_one', her iki tabloda da benzersiz anahtarlar olmasını gerektirir; 'one_to_many', yalnızca soldaki tabloda benzersiz anahtarlar olmasını gerektirir; 'many_to_one' ise yalnızca sağdaki tabloda benzersiz anahtarlar olmasını gerektirir. Bu, veri kalitesi sorunlarını erkenden yakalayan mükemmel bir savunmacı kodlama uygulamasıdır.

# Safe merge: validate that customer_id is unique in customers
try:
    result = pd.merge(orders, customers,
                      on='customer_id',
                      how='inner',
                      validate='many_to_one')
    print('Merge OK, shape:', result.shape)
except Exception as e:
    print('Merge error:', e)

indicator ile Kapsamı Denetleme

Her satırın nereden geldiğini gösteren bir _merge sütununu sonuca eklemek için indicator=True geçirin: 'left_only', 'right_only' veya 'both'. Bu, dış birleştirmeden sonra hangi kayıtların eşleştiğini ve hangilerinin eşleşmediğini belirlemek için yararlıdır; gösterge sütununu kaldırmadan önce veri kalitesini denetlemenize yardımcı olur.

result = pd.merge(orders, customers, on='customer_id',
                  how='outer', indicator=True)
print(result['_merge'].value_counts())
# both           3
# left_only      1  <- orders with no customer record
# right_only     1  <- customers with no orders

# Find unmatched orders
print(result[result['_merge'] == 'left_only'])

İç ve Dış Birleştirmelerin Özeti

İki birleştirme türünü özetlemek gerekirse: iç birleştirme kesişimi verir; yalnızca her iki DataFrame içinde eşleşen anahtarlara sahip satırlar alınır. Dış birleştirme birleşimi verir; her iki DataFrame'deki tüm satırlar alınır ve eşleşme olmayan yerlerde NaN kullanılır. Eksiksiz olması için: sol birleştirme soldaki DataFrame'in tüm satırlarını, sağ birleştirme ise sağdaki DataFrame'in tüm satırlarını korur. Bunlar sonraki derste ele alınacaktır.

# Quick reference
# how='inner'  -> intersection: only matched rows
# how='outer'  -> union: all rows from both, NaN for no match
# how='left'   -> all left rows + matched right rows
# how='right'  -> all right rows + matched left rows

# Most common: inner (default) for enrichment, left for preserving records

Hızlı Kontrol

Bu derste öğrendiğiniz pd.merge iç ve dış birleştirmeleri anlayıp anlamadığınızı sınayın.

Ders Özeti

Bu derste şunları öğrendiniz: how='inner' ile pd.merge() her iki DataFrame'den yalnızca eşleşen satırları tutar; how='outer' ise eşleşmeyenler için NaN kullanarak tüm satırları tutar; on ortak anahtarı belirtirken left_on/right_on farklı sütun adlarını işler; indicator parametresi hangi satırların eşleştiğini denetlemenize yardımcı olur. Sırada, bir taraftaki tüm satırları korumak için sol ve sağ birleştirmeleri 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

“pd.merge: İç ve Dış Birleştirmeler” dersi ücretsiz mi?

Evet — “pd.merge: İç ve Dış Birleştirmeler” 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.

“pd.merge: İç ve Dış Birleştirmeler” dersinde ne öğreneceğim?

İki DataFrame'i ortak bir anahtar sütununda iç ve dış birleştirmeler kullanarak birleştirin ve hangi satırların korunduğunu ya da kaldırıldığı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 2. dersidir.

“pd.merge: İç ve Dış Birleştirmeler” 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. DataFrame'leri Yığmak için pd.concat
  2. pd.merge: İç ve Dış Birleştirmeler
  3. Sol ve Sağ Birleştirmeler
  4. İndekse Göre Birleştirme
← Pandas & NumPy Academy Sayfasına Dön