在Python中为营养素创建一个DataFrame

时间:2017-10-30 22:42:28

标签: python pandas dictionary

我有一个字典列表,我想为'营养素'创建一个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}]]

1 个答案:

答案 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