我試圖從多個字典中填充一個熊貓數據框。每個詞典都在下面的表格:在for循環中將數據添加到Pandas Dataframe
{'Miami': {'DrPepper': '5', 'Pepsi': '8'}}
{'Atlanta:{'DrPepper':'10','Pepsi':'25'}}
最後我要的是一個數據框,看起來像這樣(在此之後我打算用熊貓做一些數據轉換後輸出數據幀以製表符分隔的文件):
DrPepper Pepsi
Miami 5 8
Atlanta 10 25
我試圖從多個字典中填充一個熊貓數據框。每個詞典都在下面的表格:在for循環中將數據添加到Pandas Dataframe
{'Miami': {'DrPepper': '5', 'Pepsi': '8'}}
{'Atlanta:{'DrPepper':'10','Pepsi':'25'}}
最後我要的是一個數據框,看起來像這樣(在此之後我打算用熊貓做一些數據轉換後輸出數據幀以製表符分隔的文件):
DrPepper Pepsi
Miami 5 8
Atlanta 10 25
如果你不介意使用額外的庫,你可以使用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
您可以使用concat
DataFrames
從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
通過T
與transpose
另一種解決方案:
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
再次,你教我相當有用的東西。 – piRSquared
@piRSquared:謝謝,我發現['toolz'](http://toolz.readthedocs.io/en/latest/index.html)庫包含大量有用的小函數。看起來像一個你會喜歡的包。另外請注意['cytoolz'](https://github.com/pytoolz/cytoolz),這是一個用於增強性能的'toolz'的cython實現 – root
我從來沒有聽說過toolz庫,感謝這個建議! – Elle