Python Pandas - Birleştirme / Birleştirme

Pandalar, tam özellikli, yüksek performanslı bellek içi birleştirme işlemlerine deyimsel olarak SQL gibi ilişkisel veritabanlarına çok benzer.

Pandalar tek bir işlev sağlar, merge, DataFrame nesneleri arasındaki tüm standart veritabanı birleştirme işlemleri için giriş noktası olarak -

pd.merge(left, right, how='inner', on=None, left_on=None, right_on=None,
left_index=False, right_index=False, sort=True)

Burada aşağıdaki parametreleri kullandık -

  • left - Bir DataFrame nesnesi.

  • right - Başka bir DataFrame nesnesi.

  • on- Katılmak için sütunlar (isimler). Hem sol hem de sağ DataFrame nesnelerinde bulunmalıdır.

  • left_on- Anahtar olarak kullanmak için soldaki DataFrame'den sütunlar. DataFrame'in uzunluğuna eşit uzunlukta sütun adları veya diziler olabilir.

  • right_on- Anahtar olarak kullanmak için sağ DataFrame'den sütunlar. DataFrame'in uzunluğuna eşit uzunlukta sütun adları veya diziler olabilir.

  • left_index - eğer True,sol DataFrame'deki dizini (satır etiketleri) birleştirme anahtarları olarak kullanın. MultiIndex (hiyerarşik) içeren bir DataFrame olması durumunda, düzeylerin sayısı, sağ DataFrame'deki birleştirme anahtarlarının sayısıyla eşleşmelidir.

  • right_index - Aynı kullanım left_index Doğru DataFrame için.

  • how- "Sol", "sağ", "dış", "iç" ten biri. İç varsayılan. Her yöntem aşağıda açıklanmıştır.

  • sort- Sonuç DataFrame'i birleştirme anahtarlarına göre sözlüksel sırayla sıralayın. Varsayılanlar Doğru, Yanlış olarak ayarlamak çoğu durumda performansı önemli ölçüde artıracaktır.

Şimdi iki farklı DataFrame oluşturalım ve üzerinde birleştirme işlemlerini gerçekleştirelim.

# import the pandas library
import pandas as pd
left = pd.DataFrame({
   'id':[1,2,3,4,5],
   'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
   'subject_id':['sub1','sub2','sub4','sub6','sub5']})
right = pd.DataFrame(
   {'id':[1,2,3,4,5],
   'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],
   'subject_id':['sub2','sub4','sub3','sub6','sub5']})
print left
print right

Onun output aşağıdaki gibidir -

Name  id   subject_id
0   Alex   1         sub1
1    Amy   2         sub2
2  Allen   3         sub4
3  Alice   4         sub6
4  Ayoung  5         sub5

    Name  id   subject_id
0  Billy   1         sub2
1  Brian   2         sub4
2  Bran    3         sub3
3  Bryce   4         sub6
4  Betty   5         sub5

Bir Anahtar Üzerinde İki Veri Çerçevesini Birleştirme

import pandas as pd
left = pd.DataFrame({
   'id':[1,2,3,4,5],
   'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
   'subject_id':['sub1','sub2','sub4','sub6','sub5']})
right = pd.DataFrame({
	'id':[1,2,3,4,5],
   'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],
   'subject_id':['sub2','sub4','sub3','sub6','sub5']})
print pd.merge(left,right,on='id')

Onun output aşağıdaki gibidir -

Name_x   id  subject_id_x   Name_y   subject_id_y
0  Alex      1          sub1    Billy           sub2
1  Amy       2          sub2    Brian           sub4
2  Allen     3          sub4     Bran           sub3
3  Alice     4          sub6    Bryce           sub6
4  Ayoung    5          sub5    Betty           sub5

Birden Çok Anahtar Üzerinde İki Veri Çerçevesini Birleştirme

import pandas as pd
left = pd.DataFrame({
   'id':[1,2,3,4,5],
   'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
   'subject_id':['sub1','sub2','sub4','sub6','sub5']})
right = pd.DataFrame({
	'id':[1,2,3,4,5],
   'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],
   'subject_id':['sub2','sub4','sub3','sub6','sub5']})
print pd.merge(left,right,on=['id','subject_id'])

Onun output aşağıdaki gibidir -

Name_x   id   subject_id   Name_y
0    Alice    4         sub6    Bryce
1   Ayoung    5         sub5    Betty

'Nasıl' Argümanını Kullanarak Birleştirme

howBirleştirme argümanı, ortaya çıkan tabloya hangi anahtarların dahil edileceğinin nasıl belirleneceğini belirtir. Sol veya sağ tablolarda bir tuş kombinasyonu görünmüyorsa, birleştirilmiş tablodaki değerler NA olacaktır.

İşte bir özeti how seçenekler ve bunların SQL eşdeğer isimleri -

Birleştirme Yöntemi SQL Eşdeğeri Açıklama
ayrıldı SOL DIŞ KATILMA Sol nesnedeki tuşları kullanın
sağ RIGHT OUTER JOIN Anahtarları doğru nesneden kullanın
dış TAM DIŞ KATILIM Anahtar birleşimini kullan
İÇ BİRLEŞİM Anahtarların kesişimini kullanın

Sol yönden katılım

import pandas as pd
left = pd.DataFrame({
   'id':[1,2,3,4,5],
   'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
   'subject_id':['sub1','sub2','sub4','sub6','sub5']})
right = pd.DataFrame({
   'id':[1,2,3,4,5],
   'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],
   'subject_id':['sub2','sub4','sub3','sub6','sub5']})
print pd.merge(left, right, on='subject_id', how='left')

Onun output aşağıdaki gibidir -

Name_x   id_x   subject_id   Name_y   id_y
0     Alex      1         sub1      NaN    NaN
1      Amy      2         sub2    Billy    1.0
2    Allen      3         sub4    Brian    2.0
3    Alice      4         sub6    Bryce    4.0
4   Ayoung      5         sub5    Betty    5.0

Sağ Katıl

import pandas as pd
left = pd.DataFrame({
   'id':[1,2,3,4,5],
   'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
   'subject_id':['sub1','sub2','sub4','sub6','sub5']})
right = pd.DataFrame({
   'id':[1,2,3,4,5],
   'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],
   'subject_id':['sub2','sub4','sub3','sub6','sub5']})
print pd.merge(left, right, on='subject_id', how='right')

Onun output aşağıdaki gibidir -

Name_x  id_x   subject_id   Name_y   id_y
0      Amy   2.0         sub2    Billy      1
1    Allen   3.0         sub4    Brian      2
2    Alice   4.0         sub6    Bryce      4
3   Ayoung   5.0         sub5    Betty      5
4      NaN   NaN         sub3     Bran      3

Dış Birleştirme

import pandas as pd
left = pd.DataFrame({
   'id':[1,2,3,4,5],
   'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
   'subject_id':['sub1','sub2','sub4','sub6','sub5']})
right = pd.DataFrame({
   'id':[1,2,3,4,5],
   'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],
   'subject_id':['sub2','sub4','sub3','sub6','sub5']})
print pd.merge(left, right, how='outer', on='subject_id')

Onun output aşağıdaki gibidir -

Name_x  id_x   subject_id   Name_y   id_y
0     Alex   1.0         sub1      NaN    NaN
1      Amy   2.0         sub2    Billy    1.0
2    Allen   3.0         sub4    Brian    2.0
3    Alice   4.0         sub6    Bryce    4.0
4   Ayoung   5.0         sub5    Betty    5.0
5      NaN   NaN         sub3     Bran    3.0

İç birleşim

Birleştirme indeks üzerinde yapılacaktır. Birleştirme işlemi çağrıldığı nesneyi onurlandırır. Yani,a.join(b) eşit değildir b.join(a).

import pandas as pd
left = pd.DataFrame({
   'id':[1,2,3,4,5],
   'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
   'subject_id':['sub1','sub2','sub4','sub6','sub5']})
right = pd.DataFrame({
   'id':[1,2,3,4,5],
   'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],
   'subject_id':['sub2','sub4','sub3','sub6','sub5']})
print pd.merge(left, right, on='subject_id', how='inner')

Onun output aşağıdaki gibidir -

Name_x   id_x   subject_id   Name_y   id_y
0      Amy      2         sub2    Billy      1
1    Allen      3         sub4    Brian      2
2    Alice      4         sub6    Bryce      4
3   Ayoung      5         sub5    Betty      5