Pandas'ta tabloları birleştirmek: merge, join, concat
Beceri rehberi

Pandas'ta tabloları birleştirmek: merge, join, concat

Hazırlayan: Mindset Institute EditörlüğüGüncellendi: 5 dk okuma

Pandas'ta tabloları merge, join ve concat ile birleştirme: how seçenekleri, anahtar sütunlar, suffixes, indicator, validate ve satır çoğalması tuzağı.

Birleştirme türleri: üst üste mi, yan yana mı?

Pandas'ta tablo birleştirmek farklı işlere karşılık gelir. Birincisi, aynı yapıdaki tabloları alt alta eklemektir: ocak, şubat ve mart satış dosyalarını tek tabloya toplamak gibi. Bunun aracı concat'tir. İkincisi, ortak bir anahtara göre sütunları yan yana getirmektir: sipariş tablosuna müşteri bilgilerini eklemek gibi. Bunun aracı merge'dür; join ise merge'ün indeks üzerinden çalışan kısayoludur.

Doğru aracı seçmek için kendinize sorun: tablolar aynı sütunlara mı sahip ve satır mı ekliyorum, yoksa farklı bilgileri taşıyan tabloları bir anahtarla eşleştiriyor muyum? İlk durumda concat, ikincisinde merge. SQL bilenler için merge, JOIN ifadesinin karşılığıdır ve how parametresi join türünü belirler.

merge: anahtara göre eşleştirme

Örnek tablolar: orders (order_id, customer_id, tutar) ve customers (customer_id, ad, sehir). Ortak anahtar customer_id'dur:

import pandas as pd

result = pd.merge(orders, customers, on="customer_id", how="left")

on parametresi, anahtarın tablolarda aynı adı taşıdığı durumda kullanılır. Adlar farklıysa left_on ve right_on verilir:

pd.merge(orders, customers, left_on="customer_code", right_on="customer_id")

Birden fazla sütun birlikte anahtar olabilir: on=["bolge", "donem"] gibi. Anahtar türleri tablolarda aynı olmalıdır; biri sayı, diğeri metin ise eşleşme sessizce başarısız olur ve sonuç boş sütunlarla dolar. Birleştirmeden önce dtypes ile türleri karşılaştırın.

Birleştirmeden önce anahtarda baştaki ve sondaki boşlukları, büyük-küçük harf farklarını temizlemek çoğu eşleşme sorununu çözer.

how seçenekleri: hangi satırlar sonuçta kalır?

how parametresi, eşleşmeyen satırların akıbetini belirler: • inner (varsayılan): Yalnızca her tabloda bulunan anahtarlar kalır. • left: Soldaki tablonun tüm satırları kalır; sağda karşılığı yoksa sağdan gelen sütunlar eksik (NaN) olur. • right: Sağdaki tablonun tüm satırları kalır. • outer: Tablolardaki tüm anahtarlar kalır, eşleşmeyenler eksik değerle dolar. • cross: Her satır diğer tablonun her satırıyla eşlenir (kartezyen çarpım).

Raporlama işlerinde en sık left kullanılır: ana tablonuzu (siparişleri) koruyup yardımcı bilgi (müşteri adı, şehir) eklersiniz. inner kullanırsanız, müşteri tablosunda karşılığı olmayan siparişler sessizce kaybolur ve toplamlar tutmaz. Hangi satırların neden kaybolduğunu görmek için aşağıdaki indicator parametresi işe yarar.

Birleştirmeyi doğrulamak: indicator, validate, suffixes

Birleştirme, hatanın en sessiz ilerlediği adımlardan biridir. Birkaç parametre bu riski azaltır.

indicator=True, sonuca _merge sütununu ekler ve her satırın nereden geldiğini gösterir: left_only, right_only ya da both. Bu sütunla eşleşmeyen kayıtları süzebilirsiniz; örneğin müşteri tablosunda karşılığı olmayan siparişleri bulmak için:

kontrol = pd.merge(orders, customers, on="customer_id", how="left", indicator=True) unmatched = kontrol[kontrol["_merge"] == "left_only"]

validate parametresi anahtarın beklediğiniz ilişkiye uyup uymadığını denetler ve ihlalde hata verir. Siparişler ile müşteriler arasında “çoktan bire” bir ilişki bekliyorsanız validate="many_to_one" yazarsınız; müşteri tablosunda mükerrer kayıt varsa pandas hata fırlatır.

suffixes, tabloların ikisinde de bulunan ve anahtar olmayan sütunların adlarını ayırır. Varsayılan ek _x ve _y şeklindedir; anlamlı ekler vermek için suffixes=("_order", "_customer") gibi bir çift yazın.

Satır çoğalması tuzağı

Anahtar sütunu tablolarda mükerrer değerler içeriyorsa, pandas eşleşen satırların kartezyen çarpımını üretir ve satır sayınız beklenmedik biçimde artar. Bu yüzden toplamlar şişer ve rapor yanlış çıkar. Müşteri tablosunda aynı müşteri numarası mükerrer geçiyorsa, o müşterinin her siparişi tekrarlı görünür.

Önlemler: • Birleştirmeden önce anahtarın benzersizliğini kontrol edin: customers["customer_id"].is_unique. • Mükerrer kayıtları drop_duplicates ile ayıklayın. • validate parametresini kullanarak ilişkinin yönünü kodda belgeleyin. • Birleştirmeden önce ve sonra satır sayısını ve ana toplamı karşılaştırmayı alışkanlık edinin.

Birleştirmeden sonra toplam tutar değiştiyse, hata büyük olasılıkla anahtar mükerrerliğindedir; bu kontrol dakikalar alır ama yanlış raporu önler.

join ve concat ayrıntıları

join, DataFrame'in yöntemidir ve varsayılan olarak indeks üzerinden soldan birleştirir: sol.join(sag). Tabloların indeksi zaten anahtar ise kısa ve okunaklıdır. Sol tablonun bir sütununu sağın indeksiyle eşlemek için on parametresi kullanılır. Pratikte hangisini kullandığınız önemli değildir; merge daha çok parametre sunar ve sütunlara göre eşleştirmede doğal seçimdir.

concat ise nesneleri bir eksen boyunca istifler:

pd.concat([ocak, subat, mart], ignore_index=True)

ignore_index=True eski indeksleri atar ve yeniden numaralandırır; aksi halde aynı indeks değerleri birden çok kez görünebilir. keys parametresi, hangi satırın hangi kaynak tablodan geldiğini işaretleyen bir üst düzey indeks ekler. Sütunları farklı olan tablolar concat edilirse, olmayan sütunlar eksik değerle dolar; bu çoğunlukla bir dosya biçimi farkını gösterir, kontrol edin.

Pandas belgeleri, concat'in veriyi kopyaladığını belirtir: bir döngü içinde art arda concat çağırmak yerine tabloları önce listeye toplayıp tek seferde birleştirmek daha verimlidir.

İleri durumlar ve sık yapılan hatalar

Zaman damgasına göre en yakın kaydı eşleştirmek için merge_asof vardır: örneğin her işlemi, ondan hemen önceki kura bağlamak. Tabloların anahtara göre sıralı olması gerekir. Sıralı birleştirme ve boşluk doldurma için merge_ordered da bulunur.

Sık yapılan hatalar: • Farklı veri türündeki anahtarları eşleştirmek. • Anahtardaki gizli boşluk ve harf farklarını temizlememek. • inner kullanıp kayıp satırı fark etmemek. • Mükerrer anahtar nedeniyle satır çoğalmasını izlememek. • Aynı adlı sütunlarda suffixes ile ayrım yapmayıp sütunu karıştırmak. • Döngüde tekrar tekrar concat yapmak. • Birleştirme sonrası doğrulama (satır sayısı, toplam) yapmamak.

Mindset programlarında bu beceri nerede çalışılır?

Tabloları birleştirmek, dağınık kaynaklardan analiz hazır veri seti kurmanın temel adımıdır. Mindset'in Python ile Veri Analizi (Pandas) eğitimi Veri Birleştirme ve Dış Kaynak Entegrasyonu modülüyle bu konuyu ele alır; Gruplama, Toplulaştırma ve Pivot Analizi ile Vaka Çalışmaları ve İş Analitiğinde Pandas modülleri birleştirilmiş veriyi iş sorularına bağlar.

Eğitim, birden çok dosya ve sistemden gelen veriyle çalışan analistler, raporlama uzmanları ve Excel'deki DÜŞEYARA ile eşleştirmelerini kodla tekrarlanabilir hâle getirmek isteyen ekipler için uygundur. Kurumsal ekipler satış, müşteri ve finans tablolarını güvenle birleştirmeyi ortak standarda bağlayabilir.

İlgili Mindset programı

Python ile Veri Analizi (Pandas)

Sık sorulanlar

Sık sorulan sorular

merge ile join arasındaki fark nedir?

merge sütunlar ya da indeksler üzerinden eşleştirir ve how, on, left_on, right_on gibi parametreler sunar. join DataFrame yöntemidir ve varsayılan olarak indekse göre soldan birleştirir. İkisi aynı işi yapabilir; indeksleri anahtar olan tablolarda join kısa yazım sağlar, sütunlara göre eşleştirmede ise merge daha okunaklıdır ve daha fazla ayar sunar.

Excel'deki DÜŞEYARA'nın pandas karşılığı nedir?

Genellikle how="left" ile merge'dür. Ana tabloyu koruyup arama tablosundan sütunları getirirsiniz. DÜŞEYARA ilk eşleşmeyi alır; merge ise mükerrer anahtarda satırları çoğaltır, bu yüzden arama tablosunda anahtarın benzersiz olduğunu validate ile doğrulayın.

Birleştirmeden sonra satır sayım neden arttı?

Büyük olasılıkla anahtar sütunu en az bir tabloda mükerrerdir ve pandas tüm eşleşmeleri üretmiştir. Anahtarın benzersizliğini is_unique ile kontrol edin, mükerrer kayıtları temizleyin ya da validate parametresiyle beklediğiniz ilişkiyi zorunlu kılın.

Farklı sütun adlarına sahip tablolar concat edilirse ne olur?

Pandas sütunların birleşimini alır; bir tabloda bulunmayan sütun için eksik değer üretir. İstediğiniz bu değilse sütun adlarını önce eşitleyin ya da join="inner" ile yalnızca ortak sütunları tutun. Beklenmedik eksik değerler genellikle dosya biçimi farkını gösterir.

Eşleşmeyen kayıtları nasıl görebilirim?

indicator=True verin; sonuçta _merge sütunu oluşur. left_only değerleri yalnızca soldaki tabloda bulunan, right_only değerleri yalnızca sağdakinde bulunan kayıtlardır. Bu sütunu filtreleyerek eşleşmeyen kayıtları listeleyin; çoğu zaman neden anahtardaki yazım farkı, boşluk ya da veri türü uyumsuzluğudur. Nedeni bulup temizledikten sonra birleştirmeyi yeniden çalıştırın.

Pandas merge, join ve concat ile Tablo Birleştirme