Wie kombiniere ich zwei Datenrahmen?

105

Ich verwende Pandas-Datenrahmen. Ich habe zum Beispiel einen ersten Datenrahmen D. Ich extrahiere zwei Datenrahmen daraus:

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

dann ändere ich die beschriftung in AundB

A.label = 1
B.label = -1

Ich möchte A und B kombinieren, damit ich sie als einen Datenrahmen haben kann, so etwas wie eine Gewerkschaftsoperation. Die Reihenfolge der Daten ist nicht wichtig. Wenn wir jedoch A und B von D abtasten, behalten sie ihre Indizes von D bei.

MKoosej
quelle

Antworten:

148

Ich glaube, Sie können die appendMethode anwenden

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

Um ihre Indizes zu behalten, verwenden Sie einfach nicht das ignore_indexSchlüsselwort ...

Joran Beasley
quelle
1
Das funktioniert. Es wird jedoch ein neuer DataFrame erstellt. Gibt es eine Möglichkeit, dies inline zu tun? Das wäre schön, wenn ich große Datenmengen stapelweise aus einer Datenbank lade, damit ich den DataFrame iterativ aktualisieren kann, ohne jedes Mal eine Kopie zu erstellen.
Andrew
1
Ja, das ist möglich, siehe: stackoverflow.com/a/46661368/5717580
-
91

Sie können auch pd.concatFolgendes verwenden , was besonders hilfreich ist, wenn Sie mehr als zwei Datenrahmen verbinden:

bigdata = pd.concat([data1, data2], ignore_index=True, sort=False)
ostrokach
quelle
Ich möchte dies verwenden, aber ich versuche, zwei gleichnamige Spalten zu verketten. O_O
lebenslanger
45

Ich dachte, dies hier hinzuzufügen, falls jemand es nützlich findet. @ostrokach hat bereits erwähnt, wie Sie die Datenrahmen zeilenübergreifend zusammenführen können

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

Zum Zusammenführen über Spalten hinweg können Sie die folgende Syntax verwenden:

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

Es gibt eine andere Lösung für den Fall, dass Sie mit Big Data arbeiten und mehrere Datensätze verketten müssen. concatkann leistungsintensiv werden. Wenn Sie also nicht jedes Mal eine neue df erstellen möchten, können Sie stattdessen ein Listenverständnis verwenden :

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

(wie hier in den Dokumenten am Ende des Abschnitts erwähnt):

Hinweis : Es ist jedoch anzumerken, dass concat(und daher append) eine vollständige Kopie der Daten erstellt wird und dass die ständige Wiederverwendung dieser Funktion zu einem erheblichen Leistungseinbruch führen kann. Wenn Sie die Operation für mehrere Datensätze verwenden müssen, verwenden Sie ein Listenverständnis.

Martin-Martin
quelle
2

Wenn Sie die Werte des ersten Datenrahmens df1durch die Werte des zweiten Datenrahmens aktualisieren / ersetzen möchten df2. Sie können dies tun, indem Sie die folgenden Schritte ausführen:

Schritt 1: Index des ersten Datenrahmens festlegen (df1)

df1.set_index('id')

Schritt 2: Index des zweiten Datenrahmens festlegen (df2)

df2.set_index('id')

und aktualisieren Sie schließlich den Datenrahmen mit dem folgenden Snippet -

df1.update(df2)
Mohsin Mahmood
quelle
0

1. Datenrahmen

train.shape

Ergebnis:-

(31962, 3)

2. Datenrahmen

test.shape

Ergebnis:-

(17197, 2)

Kombinieren

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

Prüfen

new_data.shape

Ergebnis:-

(49159, 3)
Harish Kumawat
quelle