Bagaimana cara menggabungkan dua bingkai data?

106

Saya menggunakan bingkai data Pandas. Saya memiliki kerangka data awal, katakanlah D. Saya mengekstrak dua bingkai data darinya seperti ini:

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

kemudian saya mengubah label di AdanB

A.label = 1
B.label = -1

Saya ingin menggabungkan A dan B sehingga saya dapat memilikinya sebagai satu bingkai data, seperti operasi gabungan. Urutan datanya tidak penting. Namun, ketika kita mengambil sampel A dan B dari D, mereka mempertahankan indeksnya dari D.

MKoosej
sumber

Jawaban:

150

Saya yakin Anda bisa menggunakan appendmetode ini

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

untuk menjaga indeks mereka jangan gunakan ignore_indexkata kunci ...

Joran Beasley
sumber
1
Ini bekerja. Ini menciptakan DataFrame baru. Apakah ada cara untuk melakukannya secara inline? Itu akan menyenangkan ketika saya memuat data dalam jumlah besar dari database secara berkelompok sehingga saya dapat memperbarui DataFrame secara berulang tanpa membuat salinan setiap kali.
Andrew
1
Ya, itu mungkin, lihat: stackoverflow.com/a/46661368/5717580
martin-martin
91

Anda juga dapat menggunakan pd.concat, yang sangat membantu saat Anda menggabungkan lebih dari dua kerangka data:

bigdata = pd.concat([data1, data2], ignore_index=True, sort=False)
ostrokach.dll
sumber
Saya ingin menggunakan ini, tetapi saya mencoba menggabungkan dua kolom dengan nama yang sama o_O
lifelonglearner
45

Dipikir untuk menambahkan ini di sini jika seseorang merasa berguna. @ostrokach telah menyebutkan bagaimana Anda dapat menggabungkan bingkai data di seluruh baris

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

Untuk menggabungkan seluruh kolom, Anda dapat menggunakan sintaks berikut:

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

Ada solusi lain untuk kasus Anda bekerja dengan data besar dan perlu menggabungkan beberapa kumpulan data. concatbisa menjadi intensif kinerja, jadi jika Anda tidak ingin membuat df baru setiap kali, Anda dapat menggunakan pemahaman daftar :

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

(seperti yang ditunjukkan di sini di dokumen di bagian bawah bagian):

Catatan : Namun perlu dicatat, bahwa concat(dan karenanya append) membuat salinan lengkap dari data, dan bahwa terus-menerus menggunakan kembali fungsi ini dapat menghasilkan kinerja yang signifikan. Jika Anda perlu menggunakan operasi pada beberapa set data, gunakan pemahaman daftar.

martin-martin.dll
sumber
2

Jika Anda ingin memperbarui / mengganti nilai dataframe pertama df1dengan nilai dataframe kedua df2. Anda dapat melakukannya dengan mengikuti langkah-langkah -

Langkah 1: Setel indeks kerangka data pertama (df1)

df1.set_index('id')

Langkah 2: Setel indeks kerangka data kedua (df2)

df2.set_index('id')

dan terakhir perbarui kerangka data menggunakan cuplikan berikut -

df1.update(df2)
Mohsin Mahmood
sumber
0

DataFrame pertama

train.shape

hasil:-

(31962, 3)

DataFrame ke-2

test.shape

hasil:-

(17197, 2)

Menggabungkan

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

Memeriksa

new_data.shape

hasil:-

(49159, 3)
Harish Kumawat
sumber