Birleştirme ve birleştirme arasındaki temel fark, birleştirmenin, concat kullanımının daha geniş ve daha az yapılandırılmış olduğu tabloların daha yapılandırılmış "birleştirilmesini" gerçekleştirmenize izin vermesidir.
Birleştirmek
Değinen belgeleri , pd.DataFrame.merge
sürer sağ bazı yapılandırılmış önceden tanımlanmış katılmak operasyon göre sol tablo ve sağ tablo katılmadan olarak düşünebiliriz gerekli bir argüman olarak. Sağdaki parametrenin tanımına dikkat edin .
Gerekli Parametreler
- sağ : DataFrame veya adlandırılmış Seri
Opsiyonel Parametreler
- nasıl : {'sol', 'sağ', 'dış', 'iç'} varsayılan 'iç'
- on : etiket veya liste
- left_on : etiket veya liste veya dizi benzeri
- right_on : etiket veya liste veya dizi benzeri
- left_index : bool, varsayılan Yanlış
- right_index : bool, varsayılan Yanlış
- sort : bool, varsayılan Yanlış
- son ekler : tuple of (str, str), default ('_x', '_y')
- copy : bool, varsayılan True
- gösterge : bool veya str, varsayılan False
- validate : str, isteğe bağlı
Önemli: pd.DataFrame.merge
bir pd.DataFrame
veya adlandırılmış pd.Series
nesne olma hakkını gerektirir .
Çıktı
Ayrıca, pandalarda Birleştirme İşlemi için belge dizisini kontrol edersek aşağıdadır:
Anahtar olarak sütunları veya satır dizinlerini kullanarak iki DataFrame veya Series nesnesi arasında veritabanı (SQL) birleştirme işlemi gerçekleştirin
Concat
Bakınız belgelere ait pd.concat
parametre herhangi adlandırılmış olmadığını ilk notta, masa, data_frame, dizi matris vb ama OBJS yerine. Yani, şu şekilde tanımlanan birçok "veri taşıyıcısı" nı geçirebilirsiniz:
Iterable[FrameOrSeriesUnion], Mapping[Optional[Hashable], FrameOrSeriesUnion]
Gerekli Parametreler
- objs : Series veya DataFrame nesnelerinin dizisi veya eşlemesi
Opsiyonel Parametreler
- eksen : {0 / "dizin", 1 / "sütun"}, varsayılan 0
- birleşim : {'iç', 'dış'}, varsayılan 'dış'
- ignore_index : bool, varsayılan False
- tuşlar : sıra, varsayılan Yok
- düzeyler : dizi listesi, varsayılan Yok
- adlar : liste, varsayılan Yok
- valid_integrity : bool, varsayılan Yanlış
- sort : bool, varsayılan Yanlış
- copy : bool, varsayılan True
Çıktı
- Döndürür : nesne, nesne türü
Misal
Kod
import pandas as pd
v1 = pd.Series([1, 5, 9, 13])
v2 = pd.Series([10, 100, 1000, 10000])
v3 = pd.Series([0, 1, 2, 3])
df_left = pd.DataFrame({
"v1": v1,
"v2": v2,
"v3": v3
})
df_right = pd.DataFrame({
"v4": [5, 5, 5, 5],
"v5": [3, 2, 1, 0]
})
df_concat = pd.concat([v1, v2, v3])
merge_result = df_left.merge(df_right, left_index=True, right_index=True)
concat_result = pd.concat([df_left, df_right], sort=False)
print(merge_result)
print('='*20)
print(concat_result)
Kod Çıkışı
v1 v2 v3 v4 v5
0 1 10 0 5 3
1 5 100 1 5 2
2 9 1000 2 5 1
3 13 10000 3 5 0
====================
v1 v2 v3 v4 v5
0 1.0 10.0 0.0 NaN NaN
1 5.0 100.0 1.0 NaN NaN
2 9.0 1000.0 2.0 NaN NaN
3 13.0 10000.0 3.0 NaN NaN
0 NaN NaN NaN 5.0 3.0
1 NaN NaN NaN 5.0 2.0
2 NaN NaN NaN 5.0 1.0
Bununla birlikte, eksen parametresini değiştirerek ilk çıktıyı (birleştirme) concat ile elde edebilirsiniz.
concat_result = pd.concat([df_left, df_right], sort=False, axis=1)
Aşağıdaki davranışı gözlemleyin,
concat_result = pd.concat([df_left, df_right, df_left, df_right], sort=False)
çıktılar;
v1 v2 v3 v4 v5
0 1.0 10.0 0.0 NaN NaN
1 5.0 100.0 1.0 NaN NaN
2 9.0 1000.0 2.0 NaN NaN
3 13.0 10000.0 3.0 NaN NaN
0 NaN NaN NaN 5.0 3.0
1 NaN NaN NaN 5.0 2.0
2 NaN NaN NaN 5.0 1.0
3 NaN NaN NaN 5.0 0.0
0 1.0 10.0 0.0 NaN NaN
1 5.0 100.0 1.0 NaN NaN
2 9.0 1000.0 2.0 NaN NaN
3 13.0 10000.0 3.0 NaN NaN
0 NaN NaN NaN 5.0 3.0
1 NaN NaN NaN 5.0 2.0
2 NaN NaN NaN 5.0 1.0
3 NaN NaN NaN 5.0 0.0
, yalnızca tek bir DataFrame'e veya adlandırılmış Serilere izin verdiği için birleştirme ile benzer bir işlem gerçekleştiremezsiniz.
merge_result = df_left.merge([df_right, df_left, df_right], left_index=True, right_index=True)
çıktılar;
TypeError: Can only merge Series or DataFrame objects, a <class 'list'> was passed
Sonuç
Zaten fark etmiş olabileceğiniz gibi, giriş ve çıkışlar "birleştirme" ve "birleştirme" arasında farklı olabilir.
Başlangıçta bahsettiğim gibi, ilk (ana) fark, "birleştirme" nin sınırlı nesne ve parametreler kümesi ile daha yapılandırılmış bir birleştirme gerçekleştirmesidir; burada "concat", daha geniş bir kümeyle daha az katı / daha geniş bir birleştirme gerçekleştirir nesnelerin ve parametrelerin.
Sonuç olarak, birleştirme / (giriş) değişikliklerine daha az toleranslıdır ve "concat", değişikliklere / (girişe) daha gevşek / daha az duyarlıdır. "Concat" kullanarak "birleştirme" elde edebilirsiniz, ancak bunun tersi her zaman doğru değildir.
"Birleştirme" işlemi Veri Çerçevesi sütunlarını (veya pd.Series
nesnenin adını ) veya satır indekslerini kullanır ve bu varlıkları kullandığından yalnızca Veri Çerçevelerinin veya Serilerinin yatay birleştirmesini gerçekleştirir ve sonuç olarak dikey işlemi uygulamaz.
Daha fazlasını görmek istiyorsanız, kaynak kodunu biraz derinlemesine inceleyebilirsiniz;
.merge()
ve etrafında bir tartışma.join()
.