İki veri çerçevesini nasıl birleştiririm?


107

Pandas veri çerçevelerini kullanıyorum. Bir başlangıç ​​veri çerçevem ​​var diyelim D. Ondan şu şekilde iki veri çerçevesi çıkarıyorum:

A = D[D.label == k]
B = D[D.label != k]

sonra etiketi değiştiriyorum AveB

A.label = 1
B.label = -1

A ve B'yi birleştirmek istiyorum, böylece onları tek bir veri çerçevesi, bir birleşim operasyonu gibi bir şey olarak elde edebilirim. Verilerin sırası önemli değildir. Ancak, D'den A ve B'yi örneklediğimizde, D'den indekslerini koruyorlar.

Yanıtlar:


153

appendYöntemi kullanabileceğine inanıyorum

bigdata = data1.append(data2, ignore_index=True)

dizinlerini korumak için sadece ignore_indexanahtar kelimeyi kullanmayın ...


1
Bu çalışıyor. Yine de yeni bir DataFrame oluşturur. Bunu satır içi yapmanın bir yolu var mı? Bu, bir veritabanından büyük miktarda veriyi toplu olarak yüklediğimde güzel olurdu, böylece DataFrame'i her seferinde bir kopya oluşturmadan yinelemeli olarak güncelleyebilirim.
Andrew

1
Evet, bu mümkün, bakınız: stackoverflow.com/a/46661368/5717580
martin-martin

91

Ayrıca pd.concat, ikiden fazla veri çerçevesine katılırken özellikle yararlı olan şunu da kullanabilirsiniz :

bigdata = pd.concat([data1, data2], ignore_index=True, sort=False)

Bunu kullanmak istiyorum, ancak aynı isimli iki sütunu birleştirmeye çalışıyorum o_O
lifelonglearner

45

Birinin onu yararlı bulması durumunda bunu buraya eklemek istedim @ostrokach, veri çerçevelerini satırlar arasında nasıl birleştirebileceğinizden bahsetti.

df_row_merged = pd.concat([df_a, df_b], ignore_index=True)

Sütunlar arasında birleştirmek için aşağıdaki sözdizimini kullanabilirsiniz:

df_col_merged = pd.concat([df_a, df_b], axis=1)

14

Büyük verilerle çalıştığınız ve birden çok veri kümesini birleştirmeniz gerektiği durum için başka bir çözüm var. concatperformans yoğun olabilir, bu nedenle her seferinde yeni bir df oluşturmak istemiyorsanız, bunun yerine bir liste anlama kullanabilirsiniz :

frames = [ process_file(f) for f in dataset_files ]
result = pd.append(frames)

( burada bölümün altındaki belgelerde belirtildiği gibi ):

Not : Bununla birlikte, concat(ve dolayısıyla append) verilerin tam bir kopyasını oluşturduğunu ve bu işlevi sürekli olarak yeniden kullanmanın önemli bir performans artışı yaratabileceğini belirtmek gerekir. İşlemi birkaç veri kümesi üzerinde kullanmanız gerekiyorsa, bir liste anlama kullanın.


2

İlk veri df1çerçevesinin değerlerini ikinci veri çerçevesinin değerleri ile güncellemek / değiştirmek istiyorsanız df2. bunu aşağıdaki adımları izleyerek yapabilirsiniz -

Adım 1: İlk veri çerçevesinin dizinini ayarlayın (df1)

df1.set_index('id')

Adım 2: İkinci veri çerçevesinin dizinini ayarlayın (df2)

df2.set_index('id')

ve son olarak aşağıdaki parçacığı kullanarak veri çerçevesini güncelleyin -

df1.update(df2)

0

1. dataFrame

train.shape

sonuç:-

(31962, 3)

2. dataFrame

test.shape

sonuç:-

(17197, 2)

Birleştirmek

new_data=train.append(test,ignore_index=True)

Kontrol

new_data.shape

sonuç:-

(49159, 3)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.