2017-01-10 8 views
1

Ich versuche, einen Pandas-Datenrahmen aus mehreren Wörterbüchern zu bevölkern. Jede der Wörterbücher sind in das untere Formular ein:Hinzufügen von Daten zu Pandas Dataframe in for-Schleife

{'Miami': {'DrPepper': '5', 'Pepsi': '8'}}

{'Atlanta:{'DrPepper':'10','Pepsi':'25'}}

Letztlich, was ich will, ist ein Datenrahmen, der so aussieht (Danach plane ich Pandas zu verwenden, um einige Datentransformationen dann ausgegeben zu tun der Datenrahmen auf eine Registerkarte getrennte Datei):

 DrPepper Pepsi 
Miami 5  8 
Atlanta 10  25 

Antwort

2

Wenn Sie nichts dagegen haben, eine weitere Bibliothek verwenden, können Sie verwenden toolz.merge, um alle Wörterbücher zu kombinieren, gefolgt von DataFrame.from_dict:

import toolz 

d1 = {'Miami': {'DrPepper': '5', 'Pepsi': '8'}} 
d2 = {'Atlanta': {'DrPepper': '10', 'Pepsi': '25'}} 

df = pd.DataFrame.from_dict(toolz.merge(d1, d2), orient='index') 

Bei dieser Methode wird davon ausgegangen, dass Sie keine Indexwiederholungswerte (z. B. Städtenamen) haben. Wenn Sie dies tun, werden die Wiederholungen mit dem letzten in der Liste der Wörterbücher überschrieben, die Vorrang haben.

Die resultierende Ausgabe:

 DrPepper Pepsi 
Atlanta  10 25 
Miami   5  8 
+0

noch einmal, haben Sie mir etwas ungeheuer nützlich gelehrt. – piRSquared

+1

@piRSquared: Danke, ich habe festgestellt, dass die Bibliothek ['toolz'] (http://toolz.readthedocs.io/en/latest/index.html) viele nützliche kleine Funktionen enthält. Scheint wie ein Paket, das Sie genießen würden. Beachten Sie auch, dass es ['cytoolz '] (https://github.com/pytoolz/cytoolz) gibt, was eine Cython-Implementierung von' toolz' für verbesserte Performance ist. – root

+0

Ich habe noch nie von der Toolz-Bibliothek gehört, danke für diese Empfehlung! – Elle

2

können Sie verwenden concatDataFrames erstellt von dict von DataFrame.from_dict:

d1 = {'Miami': {'DrPepper': '5', 'Pepsi': '8'}} 
d2 = {'Atlanta':{'DrPepper':'10','Pepsi':'25'}} 

print (pd.DataFrame.from_dict(d1, orient='index')) 
     Pepsi DrPepper 
Miami  8  5 

print (pd.concat([pd.DataFrame.from_dict(d1, orient='index'), 
        pd.DataFrame.from_dict(d2, orient='index')])) 
     Pepsi DrPepper 
Miami  8  5 
Atlanta 25  10 

Eine andere Lösung mit transpose von T:

print (pd.DataFrame(d1)) 
     Miami 
DrPepper  5 
Pepsi  8 

print (pd.concat([pd.DataFrame(d1).T, pd.DataFrame(d2).T])) 
     DrPepper Pepsi 
Miami   5  8 
Atlanta  10 25 

besteht die Möglichkeit, list comprehension auch:

L = [d1,d2] 
print (pd.concat([pd.DataFrame(d).T for d in L])) 
     DrPepper Pepsi 
Miami   5  8 
Atlanta  10 25 
Verwandte Themen