我有一个字典列表,我想为“营养素”创建一个DataFrame,并为“ id”添加一列
下面是字典列表的PART。
注意:db是字典的列表,对于每个字典,我有5个键(description..nutrition),每个营养是字典的列表,我希望数据框包含营养中的所有字典,并为'id添加一列'。第一个字典的id是1008。
db=[{u'description': u'Cheese, caraway',
u'group': u'Dairy and Egg Products',
u'id': 1008,
u'manufacturer': u'',
u'nutrients': [{u'description': u'Protein',
u'group': u'Composition',
u'units': u'g',
u'value': 25.18},
{u'description': u'Total lipid (fat)',
u'group': u'Composition',
u'units': u'g',
u'value': 29.2},
{u'description': u'Carbohydrate, by difference',
u'group': u'Composition',
u'units': u'g',
u'value': 3.06}]]
最佳答案
df = pd.DataFrame(db[0]['nutrients'])
df['id'] = df.index
df
description group units value id
0 Protein Composition g 25.18 0
1 Total lipid (fat) Composition g 29.20 1
2 Carbohydrate, by difference Composition g 3.06 2
更新资料
在更好地了解了您的意图之后,我认为这将满足您的需求。这个想法是为所有产品的所有营养成分创建字典列表,并插入ID。
dict_merge = lambda a,b: a.update(b) or a
nuts = [dict_merge(nut, {'id': product['id']}) for product in db for nut in product['nutrients']]
df = pd.DataFrame(nuts)
df
description group id units value
0 Protein Composition 1008 g 25.18
1 Total lipid (fat) Composition 1008 g 29.20
2 Carbohydrate, by difference Composition 1008 g 3.06