Fügen Sie eine Zeile pandas DataFrame
Verstehe ich, dass pandas ist entworfen, um die Last vollständig aufgefüllt DataFrame
aber ich muss erstellen Sie eine leere DataFrame dann Zeilen hinzufügen, eins nach dem anderen.
Was ist der beste Weg, dies zu tun ?
Habe ich erfolgreich erstellt eine leere DataFrame mit :
res = DataFrame(columns=('lib', 'qty1', 'qty2'))
Dann kann ich eine neue Zeile hinzuzufügen, und füllen Sie ein Feld mit :
res = res.set_value(len(res), 'qty1', 10.0)
Es funktioniert, aber scheint sehr seltsam :-/(es fehl das hinzufügen von string-Wert)
Wie kann ich eine neue Zeile hinzuzufügen, um mein DataFrame (mit unterschiedlichen Spalten-Typ) ?
- Hinweis: dies ist ein sehr ineffizienter Weg zum Aufbau einer großen DataFrame; neue arrays erstellt werden (kopieren der bestehenden Daten), wenn Sie anfügen einer Zeile ein.
- Thx, das ist wirklich gut zu wissen. Es ist sehr schnell auf zu Spalten hinzufügen, um riesige Tabellen?
- Wenn es zu ineffizient, um für Sie, können Sie preallocate eine zusätzliche Zeile und dann update es.
Du musst angemeldet sein, um einen Kommentar abzugeben.
.loc
ist, verweisen auf die index-Spalte, so dass, wenn Sie arbeiten mit einem bereits bestehenden DataFrame mit einem index, der nicht in einer kontinuierlichen Sequenz von ganzen zahlen, beginnend mit 0 (wie in deinem Beispiel),.loc
überschreiben vorhandener Zeilen oder Zeilen einfügen, oder erstellen Sie Lücken in Ihrem index. Ein robuster (aber nicht fool-proof-Ansatz) für das anfügen einer vorhandenen nicht-null-Länge dataframe wäre:df.loc[df.index.max() + 1] = [randint(...
oder prepopulating den index als @FooBar vorgeschlagen.[np.random.randint(-1,1) for n in range(3)]
könnten Sienp.random.randint(-1, 1, size =3)
.nan
wenn der DataFrame ist leer.df.loc[0 if pd.isnull(df.index.max()) else df.index.max() + 1]
In Fall können Sie alle Daten zu den Daten-frame im Voraus, es gibt einen viel schnelleren Ansatz als das Anhängen an einen Daten-frame:
Hatte ich eine ähnliche Aufgabe, für das Anhängen an einen Daten-frame zeilenweise dauerte 30 min, und die Schaffung eines Daten-Frames aus einer Liste von Wörterbüchern vervollständigt innerhalb von Sekunden.
It is worth noting however, that concat (and therefore append) makes a full copy of the data, and that constantly reusing this function can create a significant performance hit. If you need to use the operation over several datasets, use a list comprehension.
(pandas.pydata.org/pandas-docs/stable/...)row
Objekt kommt als ein Tupel mit 10 SaitenKönnten Sie
pandas.concat()
oderDataFrame.append()
. Für details und Beispiele finden Sie unter Zusammenführen, verknüpfen und verketten..loc
Mechanismus, der vermieden werden kann, vor allem, wenn Sie vorsichtig sind.DataFrame.append()
Sie haben, um sicherzustellen, dass Ihre Zeile von Daten ist auch ein DataFrame in den ersten Platz haben, nicht eine Liste.Wenn Sie wissen, die Anzahl der Einträge, die ex-ante -, sollten Sie preallocate den Raum, indem auch die Bereitstellung der index (Berücksichtigung der Daten Beispiel aus einer anderen Antwort):
Geschwindigkeits-Vergleich
Und - wie aus den Kommentaren - mit einer Größe von 6000, die Geschwindigkeit Unterschied wird noch größer:
Es ist schon eine lange Zeit, aber ich Stand vor dem gleichen problem zu. Und fand hier viele interessante Antworten. So war ich verwirrt, welche Methode zu verwenden.
In dem Fall der Zugabe eine Menge von Zeilen zu dataframe ich interessiert Geschwindigkeit Leistung. Also habe ich versucht die 4 beliebtesten Methoden und überprüft Ihre Geschwindigkeit.
AKTUALISIERT 2019 mit neuen Versionen von Paketen.
Auch aktualisiert wird, nachdem @FooBar Kommentar
GESCHWINDIGKEIT
Ergebnisse (in Sekunden):
Dank auch an @krassowski für nützliche Kommentar - ich aktualisierte den code.
Also ich benutze neben der durch das Wörterbuch für mich.
Code:
P. S. ich glaube, meine Erkenntnis ist nicht perfekt, und vielleicht gibt es einige Optimierungen.
df2.index.max()
für.loc
unnötig erhöht sich die Komplexität der Berechnung. Einfachedf2.loc[i] = ...
tun würde. Für mich ist es reduziert die Zeit von 10s auf 8.64 sZur effizienten Anhängen sehen Wie fügen Sie eine zusätzliche Zeile in ein pandas dataframe und die - Einstellung Mit der Erweiterung.
Hinzufügen von Zeilen über
loc/ix
auf nicht vorhandenen - Schlüssel-index-Daten. z.B. :Oder:
Können Sie fügen Sie eine einzelne Zeile als dictionary mit den
ignore_index
option.f.append(<stuff>)
erstellt ein neues Objekt, statt einfach anfügen an das aktuelle Objekt an Ort und Stelle, so, wenn Sie versuchen zum Anhängen an einen dataframe in einem Skript, die Sie brauchen, um zu sagenf = f.append(<stuff>)
Zuliebe Pythonic way, hier meine Antwort:
Können Sie bauen auch eine Liste von Listen und konvertieren Sie es in ein dataframe -
geben
Dies ist nicht eine Antwort auf die OP-Frage, aber ein Spielzeug Beispiel zur Veranschaulichung der Antwort von @ShikharDua oben, das fand ich sehr nützlich.
Während dieses fragment ist trivial, in der die eigentlichen Daten, die ich hatte 1000 s von Zeilen und vielen Spalten, und ich wollte in der Lage sein, um die Gruppe durch verschiedene Spalten, und führen Sie dann die stats unten für mehr als ein taget Spalte. Daher ist eine zuverlässige Methode für die Erstellung der Daten-frame eine Zeile zu einem Zeitpunkt war eine große Bequemlichkeit. Danke @ShikharDua !
Heraus, eine einfache und schöne Art und Weise:
Hier ist die Möglichkeit zum hinzufügen/anfügen einer Zeile in pandas DataFrame
Es kann verwendet werden, zum einfügen, Anhängen einer Zeile in leer oder gefüllt pandas DataFrame
Erstellen Sie eine neuen Datensatz(data frame) und fügen Sie old_data_frame.
pass-Liste der Werte und entsprechende Spalte Namen zu erstellen new_record (data_frame)
Anderen Weg, es zu tun (wahrscheinlich nicht sehr performant):
Können Sie verbessern auch die DataFrame Klasse wie folgt aus:
Machen es einfach. Durch die Einnahme von Liste als Eingabe, die angehängt werden als Zeile im Daten-frame:-
Sehen wir oft das Konstrukt
df.loc[subscript] = …
zu ordnen, um ein DataFrame Zeile. Mikhail_Sam gepostet benchmarks mit, unter anderem, dieses Konstrukt als auch die Methode mit dict und erstellen DataFrame am Ende. Er fand die letztere die Schnellste zu sein bei weitem. Aber wenn wir ersetzen diedf3.loc[i] = …
(vorbelegt mit DataFrame) in seinen code mitdf3.values[i] = …
, das Ergebnis ändert sich deutlich, dass das Verfahren führt, ähnlich der Verwendung von dict. Also sollten wir öfter nehmen Sie die Verwendung vondf.values[subscript] = …
berücksichtigt. Jedoch beachten Sie, dass.values
nimmt ein auf null basierender index, der unterschiedlich sein kann, DataFrame.index.Dieser wird sich darum kümmern das hinzufügen eines Elements zu einer leeren DataFrame. Das Problem ist, dass
df.index.max() == nan
für den ersten index: