Ana içeriğe geç

pandas’ta DataFrame’leri Birleştirme: merge(), concat() & join()

Pratik örneklerle concat(), merge() ve join() kullanarak pandas’ta DataFrame’leri nasıl birleştireceğinizi öğrenin.
· 13 dk. oku

Yapay Zeka ile Keşfedin

Hiç bir Kaggle yarışmasını çözmeyi denediniz mi? Eğer denediyseniz, çoğu yarışmada size sağlanan verilerin birden fazla dosyada bulunduğunu ve bazı sütunların birden fazla dosyada tekrarlandığını fark etmiş olabilirsiniz. Peki aklınıza gelen ilk şey nedir? Elbette onları birleştirmek!

Bu eğitimde, birkaç standart pandas birleştirme tekniğini pratik edeceksiniz. Daha spesifik olarak şunları öğreneceksiniz:

  • DataFrame’leri satır veya sütun bazında birleştirmek.
  • Belirli anahtarlar üzerinde left join, inner join gibi farklı mantıklarla DataFrame’leri birleştirmek.
  • DataFrame’leri indeks üzerinden join etmek.
  • pandas’ın sunduğu zaman serisi dostu birleştirme yöntemleri

Bu süreçte, birleştirme öncesi ve sonrasında ihtiyaç duyacağınız birkaç püf noktasını da öğreneceksiniz.

Özet

  • DataFrame’leri dikey (satırlar) veya yatay (sütunlar) olarak istiflemede pd.concat() kullanın
  • SQL join’larına benzer şekilde ortak sütunlarda birleştirme için pd.merge() kullanın
  • Join türünü how parametresiyle belirtin: 'inner', 'outer', 'left' veya 'right'
  • İndeks tabanlı DataFrame birleştirmeleri için .join() kullanın
  • En yakın anahtarla eşleştirme gereken zaman serisi verileri için pd.merge_asof() kullanın

pandas ile Birleştirme

DataFrame’leri birleştirmek ve kaynaştırmak, veri analizi ve makine öğrenmesi görevlerine başlarken temel işlemdir. Hemen her durumda veriler birden fazla kaynaktan ve dosyadan geldiği için, her Veri Analisti veya Veri Bilimcisinin ustalaşması gereken araç setlerinden biridir. Tüm verileri belirli bir join mantığıyla tek bir yerde toplamanız ve ardından analize başlamanız gerekebilir. SQL join’larıyla çalışanlar bu görevin önemini iyi bilir. Hatta bazı veriler üzerinde makine öğrenmesi modeli kurmak istediğinizde, birden fazla csv dosyasını tek bir DataFrame’de birleştirmeniz gerekebilir.

Neyse ki Python’daki en popüler kütüphane olan pandas imdadınıza yetişiyor! pandas, Series ve DataFrame’leri birleştirmeyi kolaylaştıran çeşitli olanaklar sunar; indeksler için küme mantığı ve join/merge türü işlemlerde ilişkisel cebir işlevselliği sağlar.

Bu eğitimdeki kodu çevrimiçi olarak çalıştırın ve düzenleyin

Kodu çalıştır

pandas Concatenate

Eğitim boyunca kullanacağınız kütüphaneyi içe aktararak başlayın: pandas

import pandas as pd

Bu eğitimde tüm işlemleri oluşturacağınız örnek (dummy) DataFrame’ler üzerinde yapacaksınız. Bir DataFrame oluşturmak için şu şekilde bir Python sözlüğü kullanabilirsiniz:

dummy_data1 = {
        'id': ['1', '2', '3', '4', '5'],
        'Feature1': ['A', 'C', 'E', 'G', 'I'],
        'Feature2': ['B', 'D', 'F', 'H', 'J']}

Burada dummy_data1 sözlüğünün anahtarları sütun adlarıdır ve listedeki değerler her bir gözlem ya da satıra karşılık gelen verilerdir. Bunu bir pandas DataFrame’ine dönüştürmek için pandas’ın DataFrame() fonksiyonunu ve sütunları adlandırmak için columns argümanını kullanacaksınız:

df1 = pd.DataFrame(dummy_data1, columns = ['id', 'Feature1', 'Feature2'])

df1
 idFeature1Feature2
01AB
12CD
23EF
34GH
45IJ

Gördüğünüz gibi artık id, Feature1 ve Feature2 adlı üç sütunlu bir DataFrame’iniz var. pandas, satır etiketleri olarak dahili bir isimsiz sütun daha oluşturur. Bir önceki df1 DataFrame’ine benzer şekilde iki DataFrame daha, df2 ve df3, oluşturacaksınız:

dummy_data2 = {
        'id': ['1', '2', '6', '7', '8'],
        'Feature1': ['K', 'M', 'O', 'Q', 'S'],
        'Feature2': ['L', 'N', 'P', 'R', 'T']}
df2 = pd.DataFrame(dummy_data2, columns = ['id', 'Feature1', 'Feature2'])

df2
 idFeature1Feature2
01KL
12MN
26OP
37QR
48ST
dummy_data3 = {
        'id': ['1', '2', '3', '4', '5', '7', '8', '9', '10', '11'],
        'Feature3': [12, 13, 14, 15, 16, 17, 15, 12, 13, 23]}
df3 = pd.DataFrame(dummy_data3, columns = ['id', 'Feature3'])

df3
 idFeature3
0112
1213
2314
3415
4516
5717
6815
7912
81013
91123

 concat()

DataFrame’leri yalnızca satır bazında birleştirmek için pandas’taki concat() fonksiyonunu kullanabilirsiniz. concat() fonksiyonuna argüman olarak DataFrame adlarını bir liste içinde geçirmeniz gerekir:

df_row = pd.concat([df1, df2])

df_row
 idFeature1Feature2
01AB
12CD
23EF
34GH
45IJ
01KL
12MN
26OP
37QR
48ST

df1 ve df2 DataFrame’lerinin artık satır bazında tek bir df_row DataFrame’inde birleştirildiğini görebilirsiniz. Ancak satır etiketleri hatalı görünüyor. Satır etiketlerinin join’e göre otomatik ayarlanmasını isterseniz, concat() fonksiyonunu çağırırken ignore_index argümanını True olarak ayarlamalısınız:

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

df_row_reindex
 idFeature1Feature2
01AB
12CD
23EF
34GH
45IJ
51KL
62MN
76OP
87QR
98ST

Artık satır etiketleri doğru!

pandas ayrıca, birleştirmeden sonra DataFrame’leri bir anahtarla etiketleme seçeneği de sunar; böylece hangi verinin hangi DataFrame’den geldiğini bilebilirsiniz. Bunu, keys adlı ek argümana DataFrame etiket adlarını bir liste olarak vererek sağlayabilirsiniz. Burada aynı birleştirmeyi df1 ve df2 DataFrame’leri için sırasıyla x ve y anahtarlarıyla yapacaksınız.

frames = [df1,df2]
df_keys = pd.concat(frames, keys=['x', 'y'])

df_keys
  idFeature1Feature2
x01AB
12CD
23EF
34GH
45IJ
y01KL
12MN
26OP
37QR
48ST

Anahtarları belirtmek, belirli bir DataFrame’e karşılık gelen verilerin alınmasını da kolaylaştırır. y etiketiyle işaretlenmiş df2 DataFrame’inin verilerini loc yöntemiyle alabilirsiniz:

df_keys.loc['y']
 idFeature1Feature2
01KL
12MN
26OP
37QR
48ST

Ayrıca concat()’e bir sözlük de geçebilirsiniz; bu durumda sözlük anahtarları, (başka anahtarlar belirtilmedikçe) keys argümanı için kullanılır:

pieces = {'x': df1, 'y': df2}

df_piece = pd.concat(pieces)

df_piece
  idFeature1Feature2
x01AB
12CD
23EF
34GH
45IJ
y01KL
12MN
26OP
37QR
48ST

concat()’ın verinin tam bir kopyasını oluşturduğunu ve bu fonksiyonun sürekli yeniden kullanılmasının ciddi bir performans kaybına yol açabileceğini not etmek gerekir. Büyük ölçekli veri işlemleri için yüksek performanslı veri işleme için pandas 2.0 ve polars seçeneklerini değerlendirin. İşlemi birçok veri kümesi üzerinde kullanmanız gerekiyorsa, liste üreteci kullanın.

frames = [ process_your_file(f) for f in files ]
result = pd.concat(frames)

DataFrame’leri sütun bazında birleştirmek için axis parametresini 1 olarak belirtebilirsiniz:

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

df_col
 idFeature1Feature2idFeature1Feature2
01AB1KL
12CD2MN
23EF6OP
34GH7QR
45IJ8ST

pandas Merge DataFrame’ler

DataFrame’lerle ilgili bir diğer yaygın işlem de merge (birleştirme) işlemidir. İki DataFrame, aynı varlık hakkında farklı türde bilgiler tutabilir ve bazı ortak özellik/sütunlarla ilişkilendirilebilir. Bu DataFrame’leri birleştirmek için pandas, concat(), merge(), join() gibi birden çok fonksiyon sağlar. Bu bölümde pandas’ın merge() fonksiyonunu kullanmayı pratik edeceksiniz.

Satır bazında df1 ve df2’yi birleştirerek oluşturduğunuz df_row ile df3’ü, ortak sütun (veya anahtar) olan id üzerinde birleştirebilirsiniz. Bunun için merge() fonksiyonuna DataFrame adlarını ve ortak sütun adı olan id’yi belirtmek üzere ek on argümanını geçin:

df_merge_col = pd.merge(df_row, df3, on='id')

df_merge_col
 idFeature1Feature2Feature3
01AB12
11KL12
22CD13
32MN13
43EF14
54GH15
65IJ16
77QR17
88ST15

Artık DataFrame’lerin, her ikisinin de id sütununda bulunan ortak değerlere göre tek bir DataFrame’de birleştiğini görebilirsiniz. Örneğin burada id değeri 1, df_row DataFrame’inde hem A, B hem de K, L ile bulunduğundan, df_merge_col adlı nihai DataFrame’de iki kez tekrarlandı; Feature3’ün 12 değeri ise df3 DataFrame’inden geldi ve tekrarlandı.

Birleştirmek istediğiniz sütunların adları farklı olabilir (bu örnekteki gibi değil). Bu tür birleştirmeler için, left_on argümanını sol DataFrame’deki sütun adı, right_on argümanını sağ DataFrame’deki sütun adı olarak belirtmelisiniz, örneğin:

df_merge_difkey = pd.merge(df_row, df3, left_on='id', right_on='id')

df_merge_difkey
 idFeature1Feature2Feature3
01AB12
11KL12
22CD13
32MN13
43EF14
54GH15
65IJ16
77QR17
88ST15

pd.concat() kullanarak bir DataFrame’e satır da ekleyebilirsiniz. Önce satır verileriyle yeni bir DataFrame oluşturun, sonra orijinal DataFrame ile birleştirin:

add_row = pd.DataFrame([['10', 'X1', 'X2', 'X3']], 
                       columns=['id', 'Feature1', 'Feature2', 'Feature3'])

df_add_row = pd.concat([df_merge_col, add_row], ignore_index=True)

df_add_row
 idFeature1Feature2Feature3
01AB12
11KL12
22CD13
32MN13
43EF14
54GH15
65IJ16
77QR17
88ST15
910X1X2X3

pandas Join Türleri

Bu bölümde, ortak bir sütun/anahtar temelinde pandas DataFrame’lerini birleştirmek için kullanılabilen farklı join mantıklarını pratik edeceksiniz. Bu join’ların mantığı, SQL’de tabloları birleştirirken kullandıklarınıza oldukça benzer. SQL’de inner ve outer join kavramlarına aşinaysanız, bu kavramlar size tanıdık gelecektir.

Join TürüSQL KarşılığıSonuçKullanım Amacı
innerINNER JOINYalnızca her iki DataFrame’de eşleşen satırlarYalnızca her iki tabloda da bulunan kayıtları istediğinizde
leftLEFT OUTER JOINSoldaki tüm satırlar + sağdan eşleşenlerBirincil DataFrame’deki tüm kayıtları korumak istediğinizde
rightRIGHT OUTER JOINSağdaki tüm satırlar + soldan eşleşenlerİkincil DataFrame’deki tüm kayıtları korumak istediğinizde
outerFULL OUTER JOINHer iki DataFrame’den tüm satırlarHer iki tablonun tam birleşimine ihtiyaç duyduğunuzda

Full Outer Join

FULL OUTER JOIN, sol ve sağ outer join sonuçlarının birleşimidir. Birleştirilen DataFrame, her iki DataFrame’den de tüm kayıtları içerir ve her iki tarafta eksik eşleşmeler için NaN değerleri ile doldurur. merge() fonksiyonunda how argümanını outer olarak belirterek full outer join yapabilirsiniz:

df_outer = pd.merge(df1, df2, on='id', how='outer')

df_outer
 idFeature1_xFeature2_xFeature1_yFeature2_y
01ABKL
12CDMN
23EFNaNNaN
34GHNaNNaN
45IJNaNNaN
56NaNNaNOP
67NaNNaNQR
78NaNNaNST

Ortaya çıkan DataFrame’in her iki tablodaki tüm kayıtları içerdiğini ve eksik eşleşmelerde NaN değerleri bulunduğunu görebilirsiniz. Dikkat edilmesi gereken bir diğer nokta ise, hangi sütunun hangi DataFrame’den geldiğini göstermek için sütun adlarına eklenen soneklerdir. Varsayılan sonekler x ve y’dir; ancak merge() fonksiyonunda suffixes argümanını belirterek bunları değiştirebilirsiniz:

df_suffix = pd.merge(df1, df2, left_on='id',right_on='id',how='outer',suffixes=('_left','_right'))

df_suffix
 idFeature1_leftFeature2_leftFeature1_rightFeature2_right
01ABKL
12CDMN
23EFNaNNaN
34GHNaNNaN
45IJNaNNaN
56NaNNaNOP
67NaNNaNQR
78NaNNaNST

Inner Join

INNER JOIN, yalnızca hem A hem de B DataFrame’lerinde eşleşen kayıt kümesini üretir. Inner join yapmak için merge() fonksiyonunun how argümanına inner geçmeniz gerekir:

df_inner = pd.merge(df1, df2, on='id', how='inner')

df_inner
 idFeature1_xFeature2_xFeature1_yFeature2_y
01ABKL
12CDMN

Right Join

RIGHT JOIN, B DataFrame’inden (sağ DataFrame) tüm kayıtları ve A DataFrame’inde (sol DataFrame) eşleşen kayıtları (varsa) üretir. Eşleşme yoksa sağ tarafta null bulunur. Right join yapmak için merge() fonksiyonunun how argümanına right geçmelisiniz:

df_right = pd.merge(df1, df2, on='id', how='right')

df_right
 idFeature1_xFeature2_xFeature1_yFeature2_y
01ABKL
12CDMN
26NaNNaNOP
37NaNNaNQR
48NaNNaNST

Left Join

LEFT JOIN, A DataFrame’inden (sol DataFrame) tüm kayıtları ve B DataFrame’inde (sağ DataFrame) eşleşen kayıtları (varsa) üretir. Eşleşme yoksa sol tarafta null bulunur. Left join yapmak için merge() fonksiyonunun how argümanına left geçmelisiniz:

df_left = pd.merge(df1, df2, on='id', how='left')

df_left
 idFeature1_xFeature2_xFeature1_yFeature2_y
01ABKL
12CDMN
23EFNaNNaN
34GHNaNNaN
45IJNaNNaN

İndekste Join

Bazen join’i indeksler veya satır etiketleri üzerinde gerçekleştirmeniz gerekebilir. Bunu yapmak için, right_index (sağ DataFrame’in indeksleri) ve left_index (sol DataFrame’in indeksleri) argümanlarını True olarak belirtmelisiniz:

df_index = pd.merge(df1, df2, right_index=True, left_index=True)

df_index
 id_xFeature1_xFeature2_xid_yFeature1_yFeature2_y
01AB1KL
12CD2MN
23EF6OP
34GH7QR
45IJ8ST

pandas Join

pandas DataFrame.join() yöntemi, DataFrame’leri benzersiz indeksler üzerinden birleştirmede kullanılır. `on` isteğe bağlı argümanıyla indeks üzerinde join edilecek sütun ad(lar)ını, how argümanlarıyla da iki nesnenin nasıl birleştirileceğini belirleyebilirsiniz. Varsayılan olarak inner join kullanır. 

pandas ile İki DataFrame Join Etme

.join kullanarak iki veri çerçevesini birleştirelim. Sütun çakışması hatasını önlemek için `lsuffix` ve `rsuffix` sağladık. Join işlemi sütun üzerinde değil indeks üzerinde yapıldığından, ya ‘id’ sütununu değiştirmemiz ya da bir sonek vermemiz gerekir.

df2.join(df3, lsuffix='_left', rsuffix='_right')

 id_leftFeature1Feature2id_rightFeature3
01KL112
12MN213
26OP314
37QR415
48ST516

`on` argümanını kullanarak da sütunları indeks üzerinde join edebiliriz. Join’in başarılı olması için df3’ün ‘id’ sütununu indekse çevirmeli ve `on` argümanına ‘id’ sütununu vermeliyiz. Varsayılan olarak left join kullanır.   

df2.join(df3.set_index('id'), on='id')

 idFeature1Feature2Feature3
01KL12.0
12MN13.0
26OPNaN
37QR17.0
48ST15.0

merge fonksiyonunda olduğu gibi, join’in işleyişini `how` argümanını vererek değiştirebiliriz. Bizim durumda inner join kullanacağız. 

df2.join(df3.set_index('id'), on='id', how = "inner")

 id_leftFeature1Feature2Feature3
01KL12
12MN13
37QR17
48ST15

Zaman Serisi Dostu Birleştirme

pandas, zaman serisi DataFrame’lerini birleştirmek için özel fonksiyonlar sağlar. Bunların belki de en kullanışlı ve popüleri merge_asof() fonksiyonudur. merge_asof(), sıralı bir left join’e benzer; ancak eşit anahtarlar yerine en yakın anahtara göre eşleştirir. Sol DataFrame’deki her satır için, sağ DataFrame’deki on anahtarı solun anahtarından küçük olan son satırı seçersiniz. Her iki DataFrame de anahtara göre sıralanmış olmalıdır.

İsteğe bağlı olarak asof merge, grup bazlı bir birleştirme de yapabilir. Bu, on anahtarındaki en yakın eşleşmeye ek olarak by anahtarını eşit şekilde eşleştirir.

Örneğin, elinizde işlemler (trades) ve kotasyonlar (quotes) olabilir ve bunları asof merge ile birleştirmek isteyebilirsiniz. Burada sol DataFrame trades, sağ DataFrame quotes olarak seçilir. time anahtarı üzerinde asof merge yapılır ve sembole (ticker) göre grup bazlı birleştirme uygulanır.

trades = pd.DataFrame({
    'time': pd.to_datetime(['20160525 13:30:00.023',
                            '20160525 13:30:00.038',
                            '20160525 13:30:00.048',
                            '20160525 13:30:00.048',
                            '20160525 13:30:00.048']),
    'ticker': ['MSFT', 'MSFT','GOOG', 'GOOG', 'AAPL'],
    'price': [51.95, 51.95,720.77, 720.92, 98.00],
    'quantity': [75, 155,100, 100, 100]},
    columns=['time', 'ticker', 'price', 'quantity'])

quotes = pd.DataFrame({
    'time': pd.to_datetime(['20160525 13:30:00.023',
                            '20160525 13:30:00.023',
                            '20160525 13:30:00.030',
                            '20160525 13:30:00.041',
                            '20160525 13:30:00.048',
                            '20160525 13:30:00.049',
                            '20160525 13:30:00.072',
                            '20160525 13:30:00.075']),
    'ticker': ['GOOG', 'MSFT', 'MSFT','MSFT', 'GOOG', 'AAPL', 'GOOG','MSFT'],
    'bid': [720.50, 51.95, 51.97, 51.99,720.50, 97.99, 720.50, 52.01],
    'ask': [720.93, 51.96, 51.98, 52.00,720.93, 98.01, 720.88, 52.03]},
    columns=['time', 'ticker', 'bid', 'ask'])
trades
 timetickerpricequantity
02016-05-25 13:30:00.023MSFT51.9575
12016-05-25 13:30:00.038MSFT51.95155
22016-05-25 13:30:00.048GOOG720.77100
32016-05-25 13:30:00.048GOOG720.92100
42016-05-25 13:30:00.048AAPL98.00100
quotes
 timetickerbidask
02016-05-25 13:30:00.023GOOG720.50720.93
12016-05-25 13:30:00.023MSFT51.9551.96
22016-05-25 13:30:00.030MSFT51.9751.98
32016-05-25 13:30:00.041MSFT51.9952.00
42016-05-25 13:30:00.048GOOG720.50720.93
52016-05-25 13:30:00.049AAPL97.9998.01
62016-05-25 13:30:00.072GOOG720.50720.88
72016-05-25 13:30:00.075MSFT52.0152.03
df_merge_asof = pd.merge_asof(trades, quotes,
              on='time',
              by='ticker')

df_merge_asof
 timetickerpricequantitybidask
02016-05-25 13:30:00.023MSFT51.957551.9551.96
12016-05-25 13:30:00.038MSFT51.9515551.9751.98
22016-05-25 13:30:00.048GOOG720.77100720.50720.93
32016-05-25 13:30:00.048GOOG720.92100720.50720.93
42016-05-25 13:30:00.048AAPL98.00100NaNNaN

Dikkatlice incelerseniz, AAPL satırında NaN görünmesinin nedenini fark edebilirsiniz. Sağdaki quotes DataFrame’inde, AAPL sembolü için 13:30:00.048’den (soldaki tablodaki zaman) daha küçük bir zaman değeri bulunmadığından, bid ve ask sütunlarına NaN’ler yerleştirildi.

Zaman sütunu için önceden tanımlı bir tolerans seviyesi de ayarlayabilirsiniz. Örneğin, yalnızca kotasyon zamanı ile işlem zamanı arasında 2 ms içinde asof merge yapmak istiyorsanız, tolerance argümanını belirtmelisiniz:

df_merge_asof_tolerance = pd.merge_asof(trades, quotes,
              on='time',
              by='ticker',
              tolerance=pd.Timedelta('2ms'))

df_merge_asof_tolerance
 timetickerpricequantitybidask
02016-05-25 13:30:00.023MSFT51.957551.9551.96
12016-05-25 13:30:00.038MSFT51.95155NaNNaN
22016-05-25 13:30:00.048GOOG720.77100720.50720.93
32016-05-25 13:30:00.048GOOG720.92100720.50720.93
42016-05-25 13:30:00.048AAPL98.00100NaNNaN

Yukarıdaki sonuç ile önceki sonuç arasındaki farka dikkat edin. Zaman toleransı 2 ms’i karşılamıyorsa satırlar birleştirilmez.

Sonuç

Bu eğitimde, pandas kütüphanesinin concat() ve merge() fonksiyonlarını kullanarak farklı mantıklara göre DataFrame’leri nasıl birleştireceğinizi öğrendiniz. Sonlara doğru, zaman serisi DataFrame’lerini birleştirmek için özel merge_asof() fonksiyonunu da pratik ettiniz. Bu süreçte DataFrame indeksleri ile çalışmayı da öğrendiniz. pandas’ta DataFrame’leri birleştirmek için keşfedebileceğiniz daha pek çok seçenek var; harika belgelerine göz atmanızı öneririm. İyi keşifler!

Bu eğitim, yazımında yardımcı olması için şu pandas dokümantasyonundan yararlanmıştır.

pandas hakkında daha fazla bilgi edinmek isterseniz, DataCamp’in Data Manipulation with pandas kursunu alın ve Python Pandas’ta DataFrame’ler eğitimimize göz atın.

DataCamp’in ayrıca şu kullanışlı pandas eğitimleri de vardır:

İyi öğrenmeler!

SSS

pandas’ta merge() ile join() arasındaki fark nedir?

merge() daha esnektir ve SQL join’larına benzer şekilde herhangi bir sütun(lar) üzerinde DataFrame’leri birleştirebilir. join() öncelikle indekslerde join için tasarlanmıştır ve dahili olarak merge()’ü çağıran bir kolaylık yöntemidir. Sütunlar üzerinde join yaparken merge(), join anahtarlarınız zaten indeks olarak ayarlanmışsa join() kullanın.

pandas’ta DataFrame’leri birden çok sütunda nasıl birleştiririm?

on parametresine sütun adlarından oluşan bir liste geçin: pd.merge(df1, df2, on=['col1', 'col2']). Sütun adları DataFrame’ler arasında farklıysa, listelerle birlikte left_on ve right_on kullanın: pd.merge(df1, df2, left_on=['a', 'b'], right_on=['c', 'd']).

DataFrame’leri birleştirirken eksik değerlere ne olur?

Davranış, join türüne bağlıdır. inner join’de eşleşmeyen satırlar dışlanır. left, right veya outer join’lerde eşleşmeyen satırlar korunur ve diğer DataFrame’den gelen sütunlarda NaN değerleriyle doldurulur. Birleştirmeden sonra bunları fillna() veya dropna() ile ele alabilirsiniz.

pandas’ta concat() ile merge()’ü ne zaman kullanmalıyım?

concat(), DataFrame’leri düşeyde (satır ekleme) veya yatayda (sütun ekleme) indeks hizalamasına göre istiflemek için kullanılır. merge(), SQL join’larına benzer şekilde ortak sütun değerlerine göre DataFrame’leri birleştirmeniz gerektiğinde kullanılır. concat()’ı DataFrame’leri "yapıştırmak" gibi, merge()’ü ise ilişkisel join’lar için düşünün.

pandas merge işleminden sonra yinelenen sütun adlarını nasıl ele alırım?

Varsayılan olarak pandas, yinelenen sütun adlarına _x ve _y soneklerini ekler. Bunu suffixes parametresiyle özelleştirin: pd.merge(df1, df2, on='id', suffixes=('_left', '_right')). Birleştirmeden sonra sütunları df.rename(columns={'old': 'new'}) ile yeniden adlandırabilir veya df.drop(columns=['col_y']) ile yinelenenleri kaldırabilirsiniz.

pandas’ta merge() ile join() arasındaki fark nedir?

merge() daha esnektir ve SQL join’larına benzer şekilde herhangi bir sütun(lar) üzerinde DataFrame’leri birleştirebilir. join() öncelikle indekslerde join için tasarlanmıştır ve dahili olarak merge()’ü çağıran bir kolaylık yöntemidir. Sütunlar üzerinde join yaparken merge(), join anahtarlarınız zaten indeks olarak ayarlanmışsa join() kullanın.

pandas’ta DataFrame’leri birden çok sütunda nasıl birleştiririm?

on parametresine sütun adlarından oluşan bir liste geçin: pd.merge(df1, df2, on=['col1', 'col2']). Sütun adları DataFrame’ler arasında farklıysa, listelerle birlikte left_on ve right_on kullanın: pd.merge(df1, df2, left_on=['a', 'b'], right_on=['c', 'd']).

DataFrame’leri birleştirirken eksik değerlere ne olur?

Davranış, join türüne bağlıdır. inner join’de eşleşmeyen satırlar dışlanır. left, right veya outer join’lerde eşleşmeyen satırlar korunur ve diğer DataFrame’den gelen sütunlarda NaN değerleriyle doldurulur. Birleştirmeden sonra bunları fillna() veya dropna() ile ele alabilirsiniz.

pandas’ta concat() ile merge()’ü ne zaman kullanmalıyım?

concat(), DataFrame’leri düşeyde (satır ekleme) veya yatayda (sütun ekleme) indeks hizalamasına göre istiflemek için kullanılır. merge(), SQL join’larına benzer şekilde ortak sütun değerlerine göre DataFrame’leri birleştirmeniz gerektiğinde kullanılır. concat()’ı DataFrame’leri "yapıştırmak" gibi, merge()’ü ise ilişkisel join’lar için düşünün.

pandas merge işleminden sonra yinelenen sütun adlarını nasıl ele alırım?

Varsayılan olarak pandas, yinelenen sütun adlarına _x ve _y soneklerini ekler. Bunu suffixes parametresiyle özelleştirin: pd.merge(df1, df2, on='id', suffixes=('_left', '_right')). Birleştirmeden sonra sütunları df.rename(columns={'old': 'new'}) ile yeniden adlandırabilir veya df.drop(columns=['col_y']) ile yinelenenleri kaldırabilirsiniz.

Konular

İlgili