Come combino due frame di dati?


105

Sto usando i frame di dati di Panda. Ho un frame di dati iniziale, diciamo D. Ne estraggo due frame di dati in questo modo:

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

poi cambio l'etichetta in AeB

A.label = 1
B.label = -1

Voglio combinare A e B in modo da poterli avere come un frame di dati, qualcosa come un'operazione di unione. L'ordine dei dati non è importante. Tuttavia, quando campioniamo A e B da D, mantengono i loro indici da D.

Risposte:


148

Credo che tu possa usare il appendmetodo

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

per mantenere i loro indici, non utilizzare la ignore_indexparola chiave ...


1
Funziona. Tuttavia, crea un nuovo DataFrame. C'è un modo per farlo in linea? Sarebbe utile quando carico enormi quantità di dati da un database in batch, in modo da poter aggiornare in modo iterativo DataFrame senza creare una copia ogni volta.
Andrew

1

91

Puoi anche usare pd.concat, che è particolarmente utile quando stai unendo più di due dataframe:

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

Voglio usare questo, ma sto cercando di concatenare due colonne con lo stesso nome o_O
lifelonglearner

45

Ho pensato di aggiungerlo qui nel caso qualcuno lo trovi utile. @ostrokach ha già menzionato come puoi unire i frame di dati tra le righe, ovvero

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

Per unire le colonne, puoi utilizzare la seguente sintassi:

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

14

C'è un'altra soluzione per il caso in cui lavori con big data e devi concatenare più set di dati. concatpuò aumentare le prestazioni, quindi se non vuoi creare un nuovo df ogni volta, puoi invece utilizzare una comprensione dell'elenco :

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

(come sottolineato qui nei documenti in fondo alla sezione):

Nota : vale la pena notare, tuttavia, che concat(e quindi append) esegue una copia completa dei dati e che il riutilizzo costante di questa funzione può creare un significativo calo delle prestazioni. Se è necessario utilizzare l'operazione su più set di dati, utilizzare una comprensione dell'elenco.


2

Se vuoi aggiornare / sostituire i valori del primo dataframe df1con i valori del secondo dataframe df2. puoi farlo seguendo i passaggi:

Passaggio 1: imposta l'indice del primo dataframe (df1)

df1.set_index('id')

Passaggio 2: impostare l'indice del secondo dataframe (df2)

df2.set_index('id')

e infine aggiorna il dataframe utilizzando il seguente snippet:

df1.update(df2)

0

1 ° dataFrame

train.shape

risultato:-

(31962, 3)

2 ° dataFrame

test.shape

risultato:-

(17197, 2)

combinare

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

Dai un'occhiata

new_data.shape

risultato:-

(49159, 3)
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.