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.

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 ...


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


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)

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)

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.


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)

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)
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.