İki pandas tablosunu birleştirmek için
Ön koşul olarak pandas kurulu olmalı ve tablolar
Bu kodda
Beklenen sonuç mantıksal olarak şöyledir:
Burada Ayşe'nin iki siparişi olduğu için aynı müşteri bilgisi iki satırda tekrarlanır. Bu bir hata değildir; bir müşterinin birden fazla siparişi varsa, bire-çok birleşimin doğal sonucudur.
Örneğin tüm müşterileri, siparişi olmayanlar da dahil olmak üzere görmek istiyorsanız müşteriler tablosunu sola koyup
Bu durumda Zeynep sonuçta kalır;
Ortak anahtarın iki tabloda farklı adlarla bulunduğu durumda
Bu örnekte soldaki tabloda
Anahtar dışındaki sütunlar iki tabloda da aynı adla bulunuyorsa pandas çakışmayı belirtmek için son ekler ekler. Bu ekleri kendiniz tanımlayabilirsiniz:
Örneğin her iki tabloda
Beklenmedik satır çoğalmasını yakalamak için anahtar ilişkisinin beklenen türünü
Bu kullanım, soldaki müşteri anahtarının tekil, sağdaki sipariş anahtarının ise aynı müşteri için birden fazla olabileceğini ifade eder. Anahtar ilişkisi bu kurala uymuyorsa işlem hata vererek sessizce yanlış sonuç üretme riskini azaltır. Birleştirmeden sonra
pd.merge() kullanılır. Birleştirme anahtarını on ile belirtir, how ile hangi satırların korunacağını seçersiniz. Örneğin müşteri bilgileri ile siparişleri musteri_id sütununda birleştirdiğinizde, ortak anahtarı taşıyan satırlara ait bilgileri tek tabloda toplayabilirsiniz.Temel kullanım
Ön koşul olarak pandas kurulu olmalı ve tablolar
DataFrame biçiminde bulunmalıdır. Aşağıdaki örnek varsayımsaldır; iki tabloda da ortak sütun adı musteri_id olarak kabul edilmiştir.
Python:
import pandas as pd
musteriler = pd.DataFrame({
"musteri_id": [1, 2, 3],
"ad": ["Ayşe", "Mehmet", "Zeynep"]
})
siparisler = pd.DataFrame({
"musteri_id": [1, 1, 2, 4],
"urun": ["Defter", "Kalem", "Çanta", "Kitap"],
"tutar": [40, 15, 250, 90]
})
sonuc = pd.merge(
musteriler,
siparisler,
on="musteri_id",
how="inner"
)
print(sonuc)
Bu kodda
musteri_id ortak anahtardır. inner birleştirme yalnızca iki tabloda da bulunan anahtarları korur. Bu nedenle 1 ve 2 numaralı müşteriler sonuçta yer alır; sipariş tablosundaki 4 numaralı müşteri musteriler tablosunda bulunmadığı için, 3 numaralı müşteri de siparişi olmadığı için sonuçta görünmez.Beklenen sonuç mantıksal olarak şöyledir:
| musteri_id | ad | urun | tutar |
|---|---|---|---|
| 1 | Ayşe | Defter | 40 |
| 1 | Ayşe | Kalem | 15 |
| 2 | Mehmet | Çanta | 250 |
Birleştirme türünü seçme
how değeri, eşleşmeyen satırların sonuçta tutulup tutulmayacağını belirler. Hangi türü seçeceğiniz, hangi tablonun temel liste olduğunuza bağlıdır.| how değeri | Korunan satırlar | Ne zaman kullanılır? |
|---|---|---|
| inner | İki tabloda eşleşenler | Yalnız ortak kayıtları incelemek için |
| left | Soldaki tablonun tamamı | Ana listeyi koruyup sağdan bilgi eklemek için |
| right | Sağdaki tablonun tamamı | Sağdaki tabloyu temel almak için |
| outer | Her iki tablodaki tüm satırlar | Eksik veya eşleşmeyen kayıtları denetlemek için |
left kullanın:
Python:
sonuc = pd.merge(
musteriler,
siparisler,
on="musteri_id",
how="left"
)
Bu durumda Zeynep sonuçta kalır;
urun ve tutar sütunlarındaki karşılığı olmayan değerler NaN olur. NaN, eşleşen sipariş bilgisi bulunmadığını gösterir; müşterinin silindiğini veya değerinin sıfır olduğunu kanıtlamaz. Sıfır anlamı gerekiyorsa bunu ayrıca dönüştürmelisiniz.Sütun adları farklıysa
Ortak anahtarın iki tabloda farklı adlarla bulunduğu durumda
left_on ve right_on kullanılır:
Python:
musteriler_farkli = musteriler.rename(columns={"musteri_id": "id"})
sonuc = pd.merge(
musteriler_farkli,
siparisler,
left_on="id",
right_on="musteri_id",
how="left"
)
Bu örnekte soldaki tabloda
id, sağdaki tabloda musteri_id anahtar olarak kabul edilir. Anahtar sütunlarının veri türleri de uyumlu olmalıdır. Birinde sayısal değer, diğerinde aynı değerlerin metin olarak tutulması eşleşme üretmeyebilir; birleştirmeden önce dtypes ile türleri kontrol edin.Aynı adlı diğer sütunları yönetme
Anahtar dışındaki sütunlar iki tabloda da aynı adla bulunuyorsa pandas çakışmayı belirtmek için son ekler ekler. Bu ekleri kendiniz tanımlayabilirsiniz:
Python:
tablo_a = pd.DataFrame({
"musteri_id": [1, 2],
"durum": ["Bekliyor", "Tamamlandı"]
})
tablo_b = pd.DataFrame({
"musteri_id": [1, 2],
"durum": ["Tamamlandı", "İptal"]
})
sonuc = pd.merge(
tablo_a,
tablo_b,
on="musteri_id",
how="left",
suffixes=("_eski", "_yeni")
)
Örneğin her iki tabloda
durum sütunu varsa sonuçta durum_eski ve durum_yeni adlarını görürsünüz. Hangi değerin kullanılacağına karar vermeden bu sütunlardan birini silmeyin; iki değer farklıysa bu durum veri güncelleme sırası veya kayıt tutarsızlığına işaret edebilir.Birleştirmeyi doğrulama
Beklenmedik satır çoğalmasını yakalamak için anahtar ilişkisinin beklenen türünü
validate ile belirtebilirsiniz:
Python:
sonuc = pd.merge(
musteriler,
siparisler,
on="musteri_id",
how="left",
validate="one_to_many"
)
Bu kullanım, soldaki müşteri anahtarının tekil, sağdaki sipariş anahtarının ise aynı müşteri için birden fazla olabileceğini ifade eder. Anahtar ilişkisi bu kurala uymuyorsa işlem hata vererek sessizce yanlış sonuç üretme riskini azaltır. Birleştirmeden sonra
sonuc.shape, sonuc.columns ve anahtar sütunundaki eksik değerleri kontrol edin; satır sayısındaki beklenmedik artış çoğunlukla yinelenen anahtar değerlerinden kaynaklanır.
Son düzenleme: