我有一个字典,我正试图变成一个数据框架。字典本质上是嵌套的,其中键需要作为列。例如:
{
"apple":[
{
"price":19,
"store":"xyz"},
{"price":13,
"store":"abc"
}
}],
"pear":[{
"price":25,
"store":"xyz"
}]
}
我希望最终数据帧的格式为
FRUIT PRICE STORE
apple 19 xyz
apple 13 abc
pear 25 xyz
我试图通过对'fruit'键进行某种类型的迭代来对列表进行排序,例如
for fruit in fruit_dict.keys():
df['FRUIT']=fruit
,然后使用pd。正常化以获得价格/商店,但这对我来说感觉非常复杂。有没有一种更简单或者更好的方法让这本字典变得更"平"呢?
对字典列表使用列表推导,并使用concat helper字典对FRUIT
列使用外部输入字典的键:
fruit_dict = {
"apple": [{
"price": 19,
"store": "xyz"
},
{
"price": 13,
"store": "abc"
}
],
"pear": [{
"price": 25,
"store": "xyz"
}]}
df = pd.DataFrame([{**{'FRUIT':k}, **x} for k, v in fruit_dict.items() for x in v])
print (df)
FRUIT price store
0 apple 19 xyz
1 apple 13 abc
2 pear 25 xyz
如果最终df的期望形状是(6,1)而不是(3,3),那么您可以使用
fruits = []
details = []
for fruit,detail in fruits_dict.items():
for x in detail:
details.append(pd.DataFrame.from_dict({'Details':x}))
fruits.append(fruit)
final = pd.concat(details,keys=fruits)
对于类似的问题也可以参考此:从嵌套字典
中的项构造pandas DataFrame