2017-01-10 130 views
1

我試圖從多個字典中填充一個熊貓數據框。每個詞典都在下面的表格:在for循環中將數據添加到Pandas Dataframe

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

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

最後我要的是一個數據框,看起來像這樣(在此之後我打算用熊貓做一些數據轉換後輸出數據幀以製表符分隔的文件):

 DrPepper Pepsi 
Miami 5  8 
Atlanta 10  25 

回答

2

如果你不介意使用額外的庫,你可以使用toolz.merge合併所有的字典,其次是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') 

此方法假定您沒有重複索引值(即城市名稱)。如果這樣做,重複將被優先權的字典列表中的最後一個覆蓋。

輸出結果:

 DrPepper Pepsi 
Atlanta  10 25 
Miami   5  8 
+0

再次,你教我相當有用的東西。 – piRSquared

+1

@piRSquared:謝謝,我發現['toolz'](http://toolz.readthedocs.io/en/latest/index.html)庫包含大量有用的小函數。看起來像一個你會喜歡的包。另外請注意['cytoolz'](https://github.com/pytoolz/cytoolz),這是一個用於增強性能的'toolz'的cython實現 – root

+0

我從來沒有聽說過toolz庫,感謝這個建議! – Elle

2

您可以使用concatDataFramesdict通過創建:

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 

通過Ttranspose另一種解決方案:

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 

可以使用list comprehension也:

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