Ich habe einen Datenrahmen:
s1 = pd.Series([5, 6, 7])
s2 = pd.Series([7, 8, 9])
df = pd.DataFrame([list(s1), list(s2)], columns = ["A", "B", "C"])
A B C
0 5 6 7
1 7 8 9
[2 rows x 3 columns]
und ich muss eine erste Zeile [2, 3, 4] hinzufügen, um zu erhalten:
A B C
0 2 3 4
1 5 6 7
2 7 8 9
Ich habe versucht append()
und concat()
funktioniert, kann aber nicht den richtigen Weg finden, wie das geht.
Wie füge ich Serien zum Datenrahmen hinzu / füge sie ein?
s1.values
alslist(s1)
eine völlig neue Liste mit zu erstellenlist(s1)
.Antworten:
Weisen Sie einem bestimmten Index einfach eine Zeile zu
loc
:Und Sie erhalten wie gewünscht:
Siehe in der Pandas-Dokumentation Indexierung: Einstellung mit Vergrößerung .
quelle
df.loc[-1] = df.iloc[[0]]
und diese einfügen möchten ? Der Rahmen kommt mit einer hinzugefügten Indexspalte , die Fehler anzeigtValueError: cannot set a row with mismatched columns
(siehe stackoverflow.com/questions/47340571/… )df.loc[-1] = [2, 3, 4] # adding a row
ist ein bisschen irreführend, da-1
es nicht die letzte Zeile / das letzte Element ist, wie es für Python-Arrays ist.Ich bin mir nicht sicher, wie Sie angerufen haben,
concat()
aber es sollte funktionieren, solange beide Objekte vom gleichen Typ sind. Vielleicht besteht das Problem darin, dass Sie Ihren zweiten Vektor in einen Datenrahmen umwandeln müssen? Die Verwendung des von Ihnen definierten df funktioniert für mich:quelle
Ein Weg, dies zu erreichen, ist
Im Allgemeinen ist es am einfachsten, Datenrahmen und keine Serien anzuhängen. In Ihrem Fall
pd.prepend()
erstelle ich zuerst den neuen Datenrahmen und hänge dann Ihren alten an , da die neue Zeile "oben" (mit Start-ID) sein soll und keine Funktion vorhanden ist .ignore_index
ignoriert den alten laufenden Index in Ihrem Datenrahmen und stellt sicher, dass die erste Zeile tatsächlich mit dem Index beginnt,1
anstatt mit dem Index neu zu starten0
.Typischer Haftungsausschluss: Cetero censeo ... das Anhängen von Zeilen ist eine recht ineffiziente Operation. Wenn Sie über die Leistung kümmern und können irgendwie gewährleisten, zunächst einen Datenrahmen mit dem richtigen (mehr) Index erstellen und dann nur das Einfügen der zusätzliche Zeile in den Datenrahmen, sollten Sie auf jeden Fall tun. Sehen:
Bisher haben wir das, was Sie hatten als
df
:Jetzt können Sie die Zeile einfach wie folgt einfügen. Da der Raum vorbelegt wurde, ist dies effizienter.
quelle
Ich habe eine kurze Funktion zusammengestellt, die etwas mehr Flexibilität beim Einfügen einer Zeile ermöglicht:
was weiter verkürzt werden könnte zu:
Dann könnten Sie etwas verwenden wie:
wo
2
ist die Indexposition indf
dem Sie einfügen möchtendf_new
.quelle
Wir können verwenden
numpy.insert
. Dies hat den Vorteil der Flexibilität. Sie müssen nur den Index angeben, in den Sie einfügen möchten.Denn
np.insert(df.values, 0, values=[2, 3, 4], axis=0)
0 teilt der Funktion den Ort / Index mit, an dem Sie die neuen Werte platzieren möchten.quelle
Das mag zu einfach erscheinen, aber es ist unglaublich, dass eine einfache Funktion zum Einfügen neuer Zeilen nicht integriert ist. Ich habe viel darüber gelesen, wie man eine neue df an das Original anfügt, aber ich frage mich, ob dies schneller wäre.
quelle
Im Folgenden finden Sie die beste Möglichkeit, eine Zeile in den Pandas-Datenrahmen einzufügen, ohne einen Index zu sortieren und zurückzusetzen:
quelle
concat()
scheint etwas schneller zu sein als das Einfügen und Neuindizieren der letzten Zeile. Für den Fall, dass sich jemand über die Geschwindigkeit zweier Top-Ansätze wundern würde:17,1 s ± 705 ms pro Schleife (Mittelwert ± Standardabweichung von 7 Läufen, jeweils 1 Schleife)
6,53 s ± 127 ms pro Schleife (Mittelwert ± Standardabweichung von 7 Läufen, jeweils 1 Schleife)
quelle
Es ist ziemlich einfach, einer Pandas eine Zeile hinzuzufügen
DataFrame
:Erstellen Sie ein reguläres Python-Wörterbuch mit denselben Spaltennamen wie Ihr
Dataframe
;Verwenden Sie die
pandas.append()
Methode und übergeben Sie den Namen Ihres Wörterbuchs. Dabei.append()
handelt es sich um eine Methode für DataFrame-Instanzen.Fügen Sie
ignore_index=True
direkt nach Ihrem Wörterbuchnamen hinzu.quelle
Sie können die Zeile einfach an das Ende des DataFrame anhängen und dann den Index anpassen.
Zum Beispiel:
Oder verwenden
concat
als:quelle
Der einfachste Weg, eine Zeile in einen Pandas-Datenrahmen einzufügen, ist:
Beispiel:
NB: Die Länge Ihrer Liste sollte mit der des Datenrahmens übereinstimmen.
quelle