Site Loader

Herkese Selamlar, Pandas derslerinin ikincisi ile birlikteyiz. Bu derste Pandas ile Join İşlemlerini yapacağız. Eğer Pandas giriş yazısına bakmadıysanız bu yazıdan önce buradan bakmanızı tavsiye ederim. Keyifli okumalar.

Pandas ile Join İşlemleri

Bir önceki yazıda tek DataFrame üzerinde işlemler yapmıştık. Aynı zamanda  bir  önceki yazıda Pandas’da DataFramelerin aslında SQL’de ki tabloların karşılığı olduğunu söylemiştik. SQL de nasıl tabloları birleştirme  işlemi yapıyorsak burada yine birleştirme işlemlerini yapacağız. Çünkü gerçek hayat projelerinde tek csv dosyasını alıp üzerinde işlemler yapılmıyor. Veriler farklı yerlerde ve farklı formatta olabilir.

Satır Bazında Birleştirme İşlemleri

Eğer verimize satır bazında veri eklemek istiyorsak kullanacağımız fonksiyon concat fonksiyonudur.  Hemen örneğimizi yapalım.

import pandas as pd

df = pd.DataFrame({"Name":["Ali","Ahmet","Kenan","Can","Berk"], 
                   "Age":[21,25,36,17,20]})

df2 = pd.DataFrame({"Name":["Zeynep","Kaan","Kemal"], 
                    "Age":[21,25,36]}

   

Elimizde df ve df2 var şimdi bunları satır bazında birleştirelim.

pd.concat([df,df2])

Satır bazında birleştirme işlemi yaptık fakat bir sonumuz var. İkinici DataFrame’den itibaren index tekrar sıfırdan başlamış ve tablo DataFrame okunabilir bir DataFrame değil. Önceki derslerimizde reset_index fonksiyonu kullanmıştık fakat bu çokta kullanılabilir bir yöntem değil. Hemen bakalım.

pd.concat([df,df2]).reset_index()

Görüldüğü üzere fazladan bir  sütun ekledi ve bu bizim istemeyeceğimiz bir durum, biz başka sütun eklemek istemiyorsak o zaman ne yapmalıyız.

pd.concat([df,df2]).reset_index(drop=True)

Eğer ben bununla uğraşmak istemiyorum diyorsanız. Bunun için zaten concat fonksiyonu bize bir parametre vermiş. Bu parametre ignore_index parametresidir. Bu parametre iki False/True değerlerini alır. Eğer bir değer verilmezse Default olarak False değerini alır. Bu parametreye True değerini vererek problemi çözmüş olacağız aslında.

pd.concat([df,df2],ignore_index=True)

Evet başarılı bir şekilde tabloları birleştirmiş olduk. Biz yazının en başında toplayacağımız verilerin farklı formatta veya farklı yapıda olacağını söylemiştik. Örneğin mesela bir DataFrame de olan bir sütun diğerinde yoksa nasıl biz çıktı almış olacağız. Df’ yeni bir sütun ekleyerek tekrar birleştirelim.

df["Salary"]=[4100,6000,11000,3800,4500]

DataFramelerin son hali şu şekilde birinde üç diğerinde iki sütun mevcut.

     

pd.concat([df,df2],ignore_index=True)

Görüldüğü gibi sütun sayısı fazla olana göre aldı ve diğer DataFrame de olmayan değerlere NaN yani boş değer atması yaptı. Bu problemi de yine concat içinde olan join parametresi ile çözeceğiz. Bu parametre ile birleştirmek istediğimiz DataFrame hangi sütunlara göre birleştireceğimizi belirtiyoruz. Peki bunu nasıl yapacağız bunu da SQL ‘de de olan bir join parametresi kullanacağız. Birleştirme türüne değerler vereceğiz örneğin iki tabloda da olan sütunlar bazında birleştirme işlemi yapılacaksa “inner” değeri vererek işlemi yapabiliriz.

pd.concat([df,df2],ignore_index=True,join="inner")

Sütun Bazında Birleştirme İşlemleri

Sütun bazında birleştirme işlemlerine örnek bir senaryo vermek gerekirse. Örneğin sizin kullanıcıların iletişim bilgileri farklı tabloda ve maaş bilgileri farklı bir tabloda siz bunları birleştirmek istiyorsunuz bu şekilde bir senaryo uygun herhalde 🙂 Aslında yine concat fonksiyonu ile yapabiliriz.

pd.concat([df1,df2], axis =1)

Evet birleştirme işlemi yaptık ama Name sütununu tekrarlı aldı peki buna nasıl bir çözüm bulabiliriz. Şu şekilde bir yöntem bulabiliriz.

 

pd.concat([df1,df2.Salary], axis =1)

Evet başarılı bir şekilde iki DataFrame birleştirdik. Ama burada bu yöntem bizim işimize yaramış olsa da aslında çok tehlikeli bir çözüm. Sebebi ise burada ki iki tablonun da sıralaması aynı öreğin Ali’nin maaşı diğer DataFrame de farklı bir satırda olsaydı o zaman yanlış birleştirme işlemi yapmış olacaktık. Evet yöntem iki DataFrame aynı sıra olduğu varsayılarak yapıldı. O zaman asıl çözüme geçelim. Bunun için merge fonksiyonunu kullanacağız.

df1.merge(df2)

Burada birleştirme işlemi ortak sütunlar üzerinde yapıldı. Biz hangi sütun üzerinden birleştirme işlemi yapacağımızı belirtmezsek Pandas Default olarak ortak bir sütun alır. Biz farklı bir sütun üzerinden yapmak istiyorsak o zaman belirmeliyiz bunu.

df1.merge(df2 , on ="Name")

Burada biz Name sütunu üzerinde birleştirme işlemi yaptığımız için Pandas şu şekilde bir işlem  yapıyor; örneğin Ali için diğer sütuna gidip oradaki Ali’nin yaş değerini alıyor.

Yazımızın sonuna geldik. Eksik veya yanlış yerler için  lütfen iletişime geçmekten çekinmeyin. Bir sonra ki yazıda gruplama işlemlerini ele alacağım.

Post Author: Cahit ISLEYEN

Data Scientist at @embedica.ai

One Reply to “Pandas ile Join İşlemleri”

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir