尝试在列中展开嵌套词典列表

时间:2019-02-03 12:47:03

标签: python pandas list dataframe nested

我正在尝试在我的数据框中扩展“记录”列,该列是字典的嵌套列表 我正在尝试提取列: 产品,利息,Id,公司,交易,日期,家庭,金额,货币

 Size                      Records.id


 10    [{u'Product': u'Ops', u'interest': 
      None, u'Id': u'78827dhdgsg', u'Company': u'Panda', 
      u'attributes': {u'type': u'Lead', u'url': 
      u'x567'}, 
      u'Deal': u'xxx6787', u'Date': 
      u'2018-12-03', u'Family': u'Ops', 
      u'Amount': 9300, u'Currency': u'USD'}]

         [{u'Product': u'gold', 
  5    u'interest': None, u'Id': u'377ffh38', 
      u'Company': u'BIGPT', u'attributes': {u'type': u'Lead', u'url': 
      u'x57589'}, 
      u'Deal': u'wakft', u'Date': 
      u'2015-10-17', u'Family': u'bugs', 
      u'Amount': 48889, u'Currency': u'USD'}]

我尝试过

pd.concat([pd.DataFrame(x) for x in data['Records.id']],keys=data.index).reset_index(level=1,drop=True)

这曾经可以工作,但是由于某些原因我一直报错,ValueError:DataFrame构造函数未正确调用!

Size Product Interest Id   Company  Deal  Date     Family  Amount Currency

10   Ops             7882.. Panda xxx.. 2018-12-03   Ops     9300  USD 
5    Ops             377ff..BIGPT wakft 2015-10-17   Bugs   48889  USD

1 个答案:

答案 0 :(得分:1)

您可以使用stack

df_1 = (df.set_index('Size')['Records.id']
          .apply(pd.Series).stack()
          .apply(pd.Series).reset_index().drop('level_1',1))

您也可以这样做

df_2 = pd.concat([pd.DataFrame(x) for x in df['records id']], 
        keys=df['size']).reset_index(level=1, drop=True).reset_index()

但是您需要将size列与此df_2相连,以获得最终所需的输出数据帧。