Pandas - join

join() Fonksiyonu

join() metodu, Veri çerçevelerini birleştirmek için kullanılan fonksiyonlardan biridir. join() fonksiyonunun parametreleri kullanılarak, matematik dersinteki Kümeler konusu mantığında birleştirme işlemleri yapılabilir.
join() metodu, parametresiz kullanıldığında varsayılan olarak left join (how = "left") değerini alır. Sol tarafta yazılan veri çerçevesindeki tüm değerler alınır, bu çerçevedeki indeks değerleri sağ tarafta yazılan veri çerçevesinde varsa, bu değerlere birleştirilir. Soldaki indeks değeri sağdaki veri çerçeveside yoksa o halde ilgili satır ve sütunlara eksik veri mahiyetinde NaN (Not a Number) değeri atanır.

Örnek veri çerçevelerimizi oluşturarak konuyu inceleyelim.

veri1 = {'A': ['A1','A2','A3','A4'],'B': ['B1','B2','B3','B4'],'C': ['C1','C2','C3','C4']}
veri2 = {'A': ['A5','A6','A7','A8'],'B': ['B5','B6','B7','B8'],'C': ['C5','C6','C7','C8']}
df1 = pd.DataFrame(veri1, index = [1,2,3,4])
df2 = pd.DataFrame(veri2, index = [5,6,7,8])
print(df1)
A B C
1 A1 B1 C1
2 A2 B2 C2
3 A3 B3 C3
4 A4 B4 C4
print(df2)
A B C
5 A5 B5 C5
6 A6 B6 C6
7 A7 B7 C7
8 A8 B8 C8
veri3 = {'A': ['A5','A6','A7','A8'],'B': ['B5','B6','B7','B8'],'C': ['C5','C6','C7','C8']}
df3 = pd.DataFrame(veri3, index = [1,6,3,8])
print(df3)
A B C
1 A5 B5 C5
6 A6 B6 C6
3 A7 B7 C7
8 A8 B8 C8
veri4 = {'Ad': ["mustafa", "halil", "emre", "burak"],
        'yas': [38,42,35,44],
        'meslek': ["yönetici", "mak.müh.", "yönetici", "akademisyen"]}
df4 = pd.DataFrame(veri4)
print(df4)
Ad yas meslek
0 mustafa 38 yönetici
1 halil 42 mak.müh.
2 emre 35 yönetici
3 burak 44 akademisyen

df1 ile df4'ü birleştirelim.

print(df1.join(df4))
A B C Ad yas meslek
1 A1 B1 C1 halil 42.0 mak.müh.
2 A2 B2 C2 emre 35.0 yönetici
3 A3 B3 C3 burak 44.0 akademisyen
4 A4 B4 C4 NaN NaN NaN

Sonuca bakarsanız, df1 veri çerçevesinin temel alındı ve df4'teki indeks değerlerine bakılarak, df1'in indeks değeri olan sütunlarının veri çerçevesine dahil edildiğini, katıldığını görebilirsiniz. Yani ilk veri çerçevesine ilave olarak, iki veri çerçevesinin ortak indeksleri eklenmiş diyebiliriz. İşlemin tersini yaparsak, yani df4'ü temel alarak join metodunu uygularsak ne olur?

print(df4.join(df1))
Ad yas meslek A B C
0 mustafa 38 yönetici NaN NaN NaN
1 halil 42 mak.müh. A1 B1 C1
2 emre 35 yönetici A2 B2 C2
3 burak 44 akademisyen A3 B3 C3

Bu kez de, tahmin ettiğimiz gibi, df4 veri çerçevesi temel alındı, ve df1'in ortak indeks değerleri dahil edildi, df4'ün indeks değeri df1 de olmadığı durumda, ilgili satıra NaN değeri atandı.

Parametreler

how parametresi

join metodunun how parametresi ile, veri çerçevelerinin, sağdaki ya da soldaki veri çerçevesine göre katılma/dahil edilme seçeneğini ayarlayabilir, veri çerçevelerinin birleşimini ya da kesişimini de alabiliriz. how parametresi, left, right, inner ve outer değerlerini alır. Varsayılan değer left'tir. (left join)

Aşağıdaki örneği inceleyerek konuyu daha iyi anlayabilirsiniz.

how parametresinin seçenekleri

join() Fonksiyonunun how parametresinin alabileceği seçenekler;

Şimdi bu seçenekleri sıra ile inceleyelim.

join_merge

left join

join() metodunun, how parametresi almadan kullanıldığında varsayılan olarak left join (how = "left") değerini aldığından bahsetmiştik. Bu durumda Sol tarafta yazılan veri çerçevesindeki tüm değerler alınır, bu çerçevedeki indeks değerleri sağ tarafta yazılan veri çerçevesinde varsa, bu değerlere birleştirilir. Soldaki indeks değeri sağdaki veri çerçeveside yoksa o halde ilgili satır ve sütunlara eksik veri mahiyetinde NaN (Not a Number) değeri atanır.
how = "left" kodunu eklesek te eklemesekte aynı sonucu elde ederiz. Ağaşıdaki kodları ayrı ayrı çalıştırıp, göreabilirsiniz.

print(df1.join(df4))
print(df1.join(df4, how="left"))
A B C Ad yas meslek
1 A1 B1 C1 halil 42.0 mak.müh.
2 A2 B2 C2 emre 35.0 yönetici
3 A3 B3 C3 burak 44.0 akademisyen
4 A4 B4 C4 NaN NaN NaN

right join

Aynı kodu, how="right" parametresi ekleyerek te çalıştırıp sonucu görelim.

print(df1.join(df4, how="right"))
A B C Ad yas meslek
0 NaN NaN NaN mustafa 38 yönetici
1 A1 B1 C1 halil 42 mak.müh.
2 A2 B2 C2 emre 35 yönetici
3 A3 B3 C3 burak 44 akademisyen

how parametresi eklenmeyen İlk kodda, indeksler 1'den yani df1 temel alınarak birleştirme işlemi gerçekleştirilirken, how="right" parametresi eklenen ikinci kodda df2 yani sağdaki veri çerçevesi temel alınarak (indeks değerli 0'dan başlayarak) birleştirme işlemi gerçekleşti.

inner join

innerseçeneği kullanıldığında, Kesişim kümesi mantığı ile birleştirme işlemi gerçekleşir. İki veri çerçevesinde ortak indeks değerlerine sahip satırlar alınır, yanyana birleştirilir.

df1 1'den 4'e kadar olan indeks değerlerine sahipken, df4 0'dan 3'e kadar indeks değerlerine sahip veri çerçeveleridir. Şimdi bu iki veri çerçevesini how="inner" parametresi ile birbirine dahil etmek istersen ne olur?

print(df1.join(df4, how="inner"))
A B C Ad yas meslek
1 A1 B1 C1 halil 42 mak.müh.
2 A2 B2 C2 emre 35 yönetici
3 A3 B3 C3 burak 44 akademisyen

İkisinde de ortak olan 1,2 ve 3 nolu indeks değerlerindeki veriler birleştirildi yani her iki veri çerçevesinin kesişimi alındı.

outer join

outerseçeneği kullanıldığında, Birleşik küme mantığı ile birleştirme işlemi gerçekleşir. Her iki veri çerçevesi tüm içeriği ile alınıp, yanyana birleştirilir.

print(df1.join(df4, how="outer"))
A B C Ad yas meslek
0 NaN NaN NaN mustafa 38.0 yönetici
1 A1 B1 C1 halil 42.0 mak.müh.
2 A2 B2 C2 emre 35.0 yönetici
3 A3 B3 C3 burak 44.0 akademisyen
4 A4 B4 C4 NaN NaN NaN

Görüldüğü üzre, önce df1 veri çerçevesi alındı, daha sonra df4 veri çerçevesinin içeriği alınarak yanına dahil edildi. Her iki veri çerçevesinde indeks değerleri içermeyen satırlan NaN olarak belirlendi.

sort parametresi

sort parametresi bool türünde değer alır. Varsayılan değer False'tur

Veri çerçevesi birleştirme anahtarıyla alfabetik (sözlüksel) olarak sıralanır. Değer False ise, birleştirme anahtarının sırası birleştirme türüne (how anahtar sözcüğü) bağlıdır.

print(df4.join(df1, sort= True))
Ad yas meslek A B C
0 mustafa 38 yönetici NaN NaN NaN
1 halil 42 mak.müh. A1 B1 C1
2 emre 35 yönetici A2 B2 C2
3 burak 44 akademisyen A3 B3 C3