1412 Stimmen

Erstellen Sie ein Pandas-Datenframe, indem Sie Zeile für Zeile hinzufügen

Wie erstelle ich ein leeres DataFrame und füge dann Zeilen einzeln hinzu?

Ich habe ein leeres DataFrame erstellt:

df = pd.DataFrame(columns=('lib', 'qty1', 'qty2'))

Dann kann ich eine neue Zeile am Ende hinzufügen und ein einzelnes Feld ausfüllen mit:

df = df._set_value(index=len(df), col='qty1', value=10.0)

Das funktioniert nur für ein Feld auf einmal. Gibt es einen besseren Weg, um eine neue Zeile zum df hinzuzufügen?

0voto

Mahdi Punkte 97

Wenn Sie einen Datenrahmen df haben und eine Liste new_list als neue Zeile zu df hinzufügen möchten, können Sie einfach folgendes tun:

df.loc[len(df)] = new_list

Wenn Sie einen neuen Datenrahmen new_df unter dem Datenrahmen df hinzufügen möchten, können Sie Folgendes verwenden:

df.append(new_df)

0voto

Gerard Punkte 177

Wenn alle Daten in Ihrem DataFrame denselben Typ haben, könnten Sie ein NumPy-Array verwenden. Sie können Zeilen direkt in das vordefinierte Array schreiben und es am Ende in ein DataFrame umwandeln. Es scheint sogar schneller zu sein als die Umwandlung einer Liste von dicts.

import pandas as pd
import numpy as np
from string import ascii_uppercase

startTime = time.perf_counter()
numcols, numrows = 5, 10000
npdf = np.ones((numrows, numcols))
for row in range(numrows):
    npdf[row, 0:] = np.random.randint(0, 100, (1, numcols))
df5 = pd.DataFrame(npdf, columns=list(ascii_uppercase[:numcols]))
print('Vergangene Zeit: {:6.3f} Sekunden für {:d} Zeilen'.format(time.perf_counter() - startTime, numOfRows))
print(df5.shape)

0voto

kamran kausar Punkte 3343

Pandas.DataFrame.append

DataFrame.append(self, other, ignore_index=False, verify_integrity=False, sort=False) 'DataFrame'

Code

df = pd.DataFrame([[1, 2], [3, 4]], columns=list('AB'))
df2 = pd.DataFrame([[5, 6], [7, 8]], columns=list('AB'))
df.append(df2)

Mit ignore_index auf True gesetzt:

df.append(df2, ignore_index=True)

0voto

Armali Punkte 16459

Wir sehen oft die Konstruktion df.loc[subscript] = … um einer DataFrame-Zeile zuzuweisen. Mikhail_Sam hat Benchmarks veröffentlicht, die unter anderem diese Konstruktion sowie die Methode mit dict und Erstellen des DataFrames am Ende enthalten. Er stellte fest, dass letztere bei weitem am schnellsten ist.

Aber wenn wir den df3.loc[i] = … (mit vorab allokiertem DataFrame) in seinem Code durch df3.values[i] = … ersetzen, ändert sich das Ergebnis signifikant, in der Weise, dass diese Methode ähnlich performt wie die Verwendung von dict. Daher sollten wir die Verwendung von df.values[subscript] = … öfter in Betracht ziehen. Beachten Sie jedoch, dass .values einen nullbasierten Index verwendet, der vom DataFrame.index abweichen kann.

-1voto

Joaquim Punkte 340

Dieser Code-Ausschnitt verwendet eine Liste von Wörterbüchern, um das Daten-Frame zu aktualisieren. Es baut auf den Antworten von ShikharDua und Mikhail_Sam auf.

import pandas as pd
farbe = ["rot", "groß", "lecker"]
obst = ["Apfel", "Banane", "Kirsche"]
dict1={}
feat_list=[]
for x in farbe:
    for y in obst:
#         print(x, y)
        dict1 = dict([('x',x),('y',y)])
#         print(f'dict 1 {dict1}')
        feat_list.append(dict1)
#         print(f'feat_list {feat_list}')
feat_df=pd.DataFrame(feat_list)
feat_df.to_csv('feat1.csv')

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X