我有一个字典列表,我想为'营养素'创建一个DataFrame,并为'id添加一列 下面是字典列表的一部分。
注意: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}]]
答案 0 :(得分:2)
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