我正在尝试从多个词典填充pandas数据帧。每个词典的格式如下:
{'Miami': {'DrPepper': '5', 'Pepsi': '8'}}
{'Atlanta:{'DrPepper':'10','Pepsi':'25'}}
最终我想要的是一个看起来像这样的数据帧(在此之后我计划使用pandas进行一些数据转换,然后将数据帧输出到制表符分隔文件):
DrPepper Pepsi
Miami 5 8
Atlanta 10 25
答案 0 :(得分:2)
您可以concat
使用从DataFrames
创建的DataFrame.from_dict
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
另一个transpose
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
也可以使用list comprehension
:
L = [d1,d2]
print (pd.concat([pd.DataFrame(d).T for d in L]))
DrPepper Pepsi
Miami 5 8
Atlanta 10 25
答案 1 :(得分: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