2014-04-26 12 views
8

Ich habe eine Liste von Python dict s jeweils mit den gleichen Tasten,Konvertieren eine Liste von dicts zu einem Pandas Datenrahmen

dict_keys= ['k1','k2','k3','k4','k5','k6'] # More like 30 keys in practice 
data = [] 
for i in range(20): # More like 3000 in practice 
    data.append({k: np.random.randint(100) for k in dict_keys}) 

und möchte es verwenden, um einen entsprechenden Pandas Datenrahmen mit einer Teilmenge der erstellen Schlüssel. Mein aktueller Ansatz ist jeden dict aus der Liste ein zu einer Zeit zu nehmen und hängen Sie ihn an den Datenrahmen mit

df = pd.DataFrame(columns=['k1','k2','k5','k6']) 
for d in data: 
    df = df.append({k: d[k] for k in list(df.columns)}, ignore_index=True) 
    # In practice, there are some calculations on some of the values here 

aber das ist sehr langsam (die aktuelle Liste und die dicts es enthält, ist ziemlich beide groß).

Gibt es eine bessere, schnellere (und idiomatischere) Methode zum Durchlaufen einer Liste von Wörterbüchern und Hinzufügen von Zeilen zu einem Pandas-Datenrahmen?

Antwort

12

einfach passieren data zu DataFrame ‚s __init__ oder zu DataFrame.from_records (entweder funktionieren würde).

Sie können auch einen Index festlegen, z. DataFrame.from_records(data, index = 'k1').

Wenn Sie auch einige Berechnungen durchführen müssen, ist es normalerweise einfacher und bequemer, es auf dem DataFrame zu tun, nachdem Sie es erstellt haben. Nutze Pandas!

+1

Wow, 'from_records' ist * schnell *! – orome

Verwandte Themen