【问题标题】:Python: extract dictionary in list into new rowPython:将列表中的字典提取到新行中
【发布时间】:2021-02-19 06:50:03
【问题描述】:

我在 Python 的列表中有以下字典,我想提取“详细信息”的值并将其拆分为新列。我将字典存储在数据框中,如下所示:

id_x = ['1','2','3','4']
phone = ['45651','5465652','35453','09434']
detail = [[{'qty':'10', 'name':'indeed','code':'AAA'}],
          [{'qty':'10', 'name':'indeed','code':'AAA'}, {'qty':'50', 'name':'erd','code':'BBB'}],
          [{'qty':'13', 'name':'oilen','code':'CCC'}],
          []
         ]

df= pd.DataFrame({'id':id_x, 'phone':phone, 'detail':detail})
df

id  phone   detail
1   45651   [{'qty': '10', 'name': 'indeed', 'code': 'AAA'}]
2   5465652 [{'qty': '10', 'name': 'indeed', 'code': 'AAA', {'qty':'50', 'name':'erd','code':'BBB'}]
3   35453   [{'qty': '13', 'name': 'oilen', 'code': 'CCC'}]
4   09434   []

我希望得到列:id、phone、detail_qty、detail_name、detail_code

当元素超过1个时,它会提取到一个新行。

这是预期的数据框:

id  phone   detail_qty  detail_name detail_code
1   45651   10          indeed      AAA
2   5465652 10          indeed      AAA
2   5465652 50          erd         BBB
3   35453   13          oilen       CCC
4   09434       

能否请您告知如何获得所需的列表?

谢谢。

【问题讨论】:

  • 请查看How to ask a good question。基本上,你应该尝试解决你的问题,发布你的代码,并提出一个具体的问题。

标签: python list dictionary


【解决方案1】:

创建一个新的数据框df2

This(condition) if len(df.loc[i,'detail']) > 0 检查列表是否为空,for 循环检查 detail 列中的每个列表中是否有超过 1 个字典

我希望剩下的事情是不言自明的

df2 = pd.DataFrame()
count = 0
for i in df.index: 
    id_temp = df.loc[i,'id']
    phone_temp = df.loc[i,'phone']
    if len(df.loc[i,'detail']) > 0: 
        for j in df.loc[i,'detail']:
            df2.loc[count,'id'] = id_temp
            df2.loc[count,'phone'] = phone_temp
            df2.loc[count, 'detail_qty'] = j['qty']
            df2.loc[count, 'detail_name'] = j['name']
            df2.loc[count, 'detail_code'] = j['code']
            count += 1
    else: 
        df2.loc[count,'id'] = id_temp
        df2.loc[count,'phone'] = phone_temp
        df2.loc[count, 'detail_qty'] = ''
        df2.loc[count, 'detail_name'] = ''
        df2.loc[count, 'detail_code'] = ''
        count += 1

print(df2)

输出

  id    phone detail_qty detail_name detail_code
0  1    45651         10      indeed         AAA
1  2  5465652         10      indeed         AAA
2  2  5465652         50         erd         BBB
3  3    35453         13       oilen         CCC
4  4    09434                                   

【讨论】:

  • 希望答案是有帮助的。如果您的问题得到解决,请接受解决方案。
猜你喜欢
  • 1970-01-01
  • 2021-04-30
  • 2017-08-29
  • 2022-07-12
  • 2021-12-05
  • 2020-07-21
  • 2017-12-15
  • 2011-07-16
  • 2021-09-26
相关资源
最近更新 更多