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 |
iç | İÇ 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