使用键作为新列从字典创建数据帧?



我有一个字典,我正试图变成一个数据框架。字典本质上是嵌套的,其中键需要作为列。例如:

{
"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

相关内容

  • 没有找到相关文章

最新更新