gokcesimge
İstanbul Data Science Academy
7 min readMay 2, 2024

--

DataFrame’leri Python ile Birleştirme

Pandas, veri manipülasyonu ve analizi için tasarlanmış güçlü ve esnek bir Python kütüphanesidir. İki temel veri yapısı sağlar: DataFrames ve Series. Bunlar sırasıyla tablo verilerini ve tek boyutlu dizileri temsil etmek için kullanılır. Bu yapılar, büyük veri kümeleriyle çalışmayı, veriyi temizlemeyi, hesaplamalar yapmayı ve sonuçları görselleştirmeyi kolaylaştırır.

Veri bilimi ve mühendislik dünyasında, çoğu zaman birden fazla veri kümesini birleştirmeniz veya çeşitli şekillerde manipüle etmeniz gereken durumlarla karşılaşmak yaygındır. Örneğin, farklı kaynaklardan gelen verileri birleştirmeniz ve yinelenen örnekleri kaldırmanız gerekebilir. Böyle bir işlemi ele almanın yollarından biri, birleştirme işlemidir.

concat()

Pandas’taki concat() yöntemi, DataFrames’i veya series yapılarını belirli bir eksen (satırlar veya sütunlar) boyunca birleştirmenize olanak tanıyan bir araçtır. Özellikle structure yapıdaki veri kümelerini birleştirmek ve analiz etmek için kullanışlıdır.

concat() yöntemine ve parametrelerine genel bakış:

import pandas as pd

pd.concat(objs, axis=0, join=’outer’, ignore-index=False, keys=None, levels=None, names=None, verify_integrity=False, sort=False, copy=True)
  • ‘objs’: DataFrame’leri veya Seriesleri birleştirme amacıyla sıralamak veya eşlemek için kullanılır.
  • ‘axis’: Bu, verilerin birleştirildiği ekseni tanımlar. Varsayılan olarak 0'a ayarlanmıştır; bu, işlevin dikey olarak birleştirmeye devam ettiği anlamına gelir.
  • ‘join’: Diğer eksendeki indekslerin nasıl işleneceğini belirtir. Seçenekler arasında tüm indeksleri birleştiren ‘outer’ veya onlarla kesişen ‘inner’ yer alır. Varsayılan olarak outer olarak seçilir.
  • ‘ignore_index’: Ortaya çıkan DataFrame veya Seriesdeki indexleri sıfırlar. Varsayılan olarak false ayarlıdır.
  • ‘keys’: Bu, birleştirilen nesneler için hiyerarşik bir dizin oluşturmak için kullanılan isteğe bağlı bir sıradır.
  • ‘levels’: Bu, bir MultiIndex oluştururken kullanılacak unique değerlerin belirtilmesine olanak tanır.
  • ‘names’: Ortaya çıkan hiyerarşik dizindeki seviyelere ad atama yeteneği sağlar.
  • ‘verify_integrity’: True olarak ayarlanırsa , yeni birleştirilmiş eksenin kopyalar içerip içermediğini kontrol eder. Varsayılan olarak false gelir.
  • ‘sort’: Bu, join=’outer’ ile hizalanmamışsa ve True olarak ayarlanmışsa, birleştirme olmayan ekseni sıralar. Varsayılan olarak false olarak gelir.
  • ‘copy’: False olarak ayarlandığında , mümkünse verilerin giriş nesnelerinden kopyalanmasını önler. Varsayılan olarak True gelir.

DataFrame nesnelerini concat() ile birleştirme:

‘axis’ örneği:

‘join’ örneği:

‘axis’ örneği:

‘ignore_index’ örneği:

keys’ örneği:

merge()

merge fonksiyonu, temel veri seti birleştirme işlemlerinde Pandas’ta kullanılan ana fonksiyondur. Bu fonksiyon, belirtilen veri seti dizinine veya sütununa dayanarak iki veri setini birleştirir.

merge fonksiyonunun nasıl çalıştığını göstermek için bir veri seti örneği oluşturalım:

import pandas as pd

customer = pd.DataFrame({'cust_id': [1,2,3,4,5],
'cust_name': ['Maria', 'Fran', 'Dominique', 'Elsa', 'Charles'],
'country': ['German', 'Spain', 'Japan', 'Poland', 'Argentina']})

order = pd.DataFrame({'order_id': [200, 201,202,203,204],
'cust_id':[1,3,3,4,2],
'order_date': ['2014-07-05', '2014-07-06', '2014-07-07', '2014-07-07', '2014-07-08'],
'order_value': [10.1, 20.5, 18.7, 19.1, 13.5]})

Yukarıdaki örnekte, customer ve order verilerini simüle etmeye çalışıyoruz; burada hem DataFrame’de mevcut olan cust_id sütunu var.

Fonksiyonu daha iyi anlamak için DataFrame birleştirme işlemi gerçekleştirelim.

Column ve Index Merging

Sütun her iki DataFrame'de mevcutsa ‘on’ parametresini kullanabiliriz.

Eğer ortak iki tane sütun var ise:

customer = pd.DataFrame({'cust_id': [1,2,3,4,5],
'cust_name': ['Maria', 'Fran', 'Dominique', 'Elsa', 'Charles'],
'country': ['German', 'Spain', 'Japan', 'Poland', 'Argentina']})

order = pd.DataFrame({'order_id': [200, 201,202,203,204],
'cust_id':[1,3,3,4,2],
'order_date': ['2014-07-05', '2014-07-06', '2014-07-07', '2014-07-07', '2014-07-08'],
'order_value': [10.1, 20.5, 18.7, 19.1, 13.5],
'country' : ['German', 'Indonesia', 'Armenia', 'Singapore', 'Japan']
})

Artık her veri setinde ortak iki sütun içeriyor: cust_id ve country. Varsayılan yöntemi kullanarak her iki DataFrame’i birleştirirsek ne olacağını görelim.

Sadece bir satır kalmış durumda. Bu, merge fonksiyonunun her iki veri setinde de aynı adlara sahip tüm sütunları anahtarlar olarak kullanarak veri setlerinin birleştirmesidir. Bu durumda, birleştirilmiş veri seti, hem cust_id hem de country sütunlarında bulunan aynı değerlerin birleştirilmesinden oluşur.

Gerçek bir durumda, aynı sütun adına sahip iki veri seti olabilir. Örneğin, müşteri veri setindeki country sütunu müşterinin yaşadığı ülkeyi ifade edebilir, ancak sipariş veri setindeki country sütunu teslimatın gideceği yer olarak kullanılabilir. Bu nedenle, veri birleştirme (veya herhangi bir analiz faaliyeti) yapmadan önce sütun içeriğini bilmek iyi olur.

Yukarıdaki durumda, veri kümelerini birleştirmek için hangi sütunda birleştirmek istediğimizi belirtmek istiyoruz. Diyelim ki verileri cust_id sütunuyla birleştirmek istiyoruz.

‘on’ parametresi, yalnızca aynı sütun adlarına sahip veri kümelerini birleştirmek istediğimizde çalışır. Farklı sütun adlarına sahip iki veri kümesini birleştiren durumlarda, left_on ve right_on parametrelerini kullanırız.

Yukarıdaki kodda sol veri kümesinde (Customer) birleştirmek istediğimiz sütunu left_on parametresine geçirirken aynı zamanda sağ veri kümesinden (Order) sütun adı ile right_on parametresini de aktarıyoruz.

Varsayılan olarak, veri kümesini birleştirdiğimizde merge inner join gerçekleştirir. Anahtarlar arasındaki kesişime dayanarak satırları seçer. Customer ve Order veri kümelerindeki sütun ve/veya dizinler arasında bulunan aynı değerler eşleştirilir ve yalnızca eşleşen değerler seçilir.

pd.merge(customer, order, left_on = 'customer_country',  
right_on = 'delivery_country', suffixes = ('_customer', '_order'),
how = 'inner')

Birleştirme işlemi sırasında, her iki veri kümesinin değerlerini birleştirirken bir veri kümesinin değerlerini korumamız gereken zamanlar olabilir. Örneğin, customer ve order veri kümelerini birleştirmek istiyorum, ancak customer verilerinin filtrelenmesini istemiyorum. Bu durumda, istediğimiz DataFrame’i korumak için left ve righy join kullanabiliriz.

Yukarıdaki sonuca baktığımızda, onları country anahtarıyla birleştirerek birleştirilmiş veri kümesine sahip oluyoruz, ancak customer veri kümesi hala sonuçta mevcuttur. Sipariş veri değerleriyle eşleşmeyen tüm customer veri değerleri NaN değeri ile doldurulur.

Ayrıca, satırların nereden geldiğini göstermek için indicator parametresini true olarak yazarız. indicator parametresini true olarak yazdığımızda , _merge adında bir sütun oluşturulur. Yukarıdaki sonuçta, hem DataFrame’lerin kesişiminden gelen satırları gösteren değerler hem de ilk DataFrame’den gelen satırları gösteren left_only değerleri bulunmaktadır.

Tersi de mümkündür. right join gerçekleştirmek istiyorsak, aşağıdaki kodu kullanabiliriz.

Ek olarak, Outer Join kullanarak birleştirme işlemi sırasında her iki DataFrame’i de koruyabiliriz. Outer Join’ı, Sol ve Sağ Birleştirme işleminin aynı anda gerçekleştirilmiş hali olarak düşünebiliriz.

Pandas tarafından geliştirilen merge_ordered fonksiyonu, sıralı veya zaman serisi verileri birleştirmek için özel olarak geliştirilmiştir. Ancak, fonksiyonu herhangi bir düzende olmayan veriler için de kullanmak mümkündür.

Varsayılan olarak, merge_ordered fonksiyonu Outer Join gerçekleştirir ve birleştirme anahtarlarına göre verileri sıralar. Ancak, merge türünü değiştirmek için olduğu gibi, how parametresini ayarlayarak bu davranışı değiştirebiliriz.

Yukarıda da belirttiğim gibi merge_ordered zaman serisi gibi sıralı veriler için geliştirildi. Bunu yapmak için, zaman serisi veri birleştirmeyi simüle etmek amacıyla Delivery adı verilen başka bir veri kümesi oluşturacağız.

order = pd.DataFrame({'order_id': [200, 201,202,203,204],
'cust_id':[1,3,3,4,2],
'order_date': ['2014-07-05', '2014-07-06', '2014-07-07', '2014-07-07', '2014-07-08'],
'order_value': [10.1, 20.5, 18.7, 19.1, 13.5],
'delivery_country' : ['German', 'Indonesia', 'Armenia', 'Singapore', 'Japan']
})

delivery = pd.DataFrame({'delivery_date': ['2014-07-06', '2014-07-08', '2014-07-09', '2014-07-10'],
'product': ['Apple', 'Apple', 'Orange', 'Orange']})

Her iki veri kümesini de date sütunlarına göre birleştirmeye çalışalım.

Son olarak merge_ordered işlevi, kullanıcının veri kümesi sütununa göre DataFrame gruplaması yapmasına ve bunları parça parça diğer veri kümesiyle birleştirmesine olanak tanır.

Daha iyi anlamak için bir kod örneği kullanalım.

Yukarıdaki kodda right_by parametresine product sütununu yazıyoruz. Sonuç, product sütunundaki her değerin mevcut her satırla eşleştirilmesi ve verileri gruplamak için kullanılan aynı DataFrame’deki mevcut olmayan verilerin NaN/NaT ile doldurulmasıdır.

Tabloları birleştirmek için Pandas kütüphanesinin concat ve merge fonksiyonları oldukça kullanışlıdır. concat fonksiyonu, verileri satır veya sütun bazında birleştirmek için kullanılırken, merge fonksiyonu verileri belirli bir sütuna göre birleştirmek için idealdir. Bu fonksiyonlar, veri analizi ve işlemlerinde büyük ölçüde kolaylık sağlar ve veri bütünlüğünü korur. Her iki fonksiyon da farklı senaryolara ve gereksinimlere uygun esneklik sunar, böylece kullanıcılar veri manipülasyonunda ihtiyaçlarına göre tercihlerini yapabilirler. Bu fonksiyonlar, Pandas’ın güçlü veri işleme yeteneklerine katkı sağlar ve veri bilimcilerinin veri setlerini etkili bir şekilde yönetmelerine olanak tanır.

--

--