2014-11-24 91 views
0

我有一个嵌套字典,有5个级别masterdict = {a : {b: {c: {d : { e: }}}}},我试图创建一个平坦的数据框架。如何从深度嵌套字典创建数据框?

当我运行下面的代码:

masterDF = pd.DataFrame() 

for a in masterdict: 
    for b in masterdict[a]: 
     for c in masterdict[a][b]: 
     for d in masterdict[a][b][c]: 
      eDF = pd.DataFrame(masterdict[a][b][c][d]) 
      eDF['level4'] = str(d) 
      eDF['level3'] = str(c) 
      eDF['level2'] = str(b) 
      eDF['level1'] = str(a) 
      masterDF = masterDF.append(eDF) 

我收到以下错误:

--------------------------------------------------------------------------- 
PandasError        Traceback (most recent call last) 
<ipython-input-13-cc9930935c64> in <module>() 
     5  for c in masterdict[a][b]: 
     6   for d in masterdict[a][b][c]: 
----> 7    eDF = pd.DataFrame(masterdict[a][b][c][d]) 
     8    eDF['level4'] = str(d) 
     9    eDF['level3'] = str(c) 

C:\Anaconda\lib\site-packages\pandas\core\frame.pyc in __init__(self, data, index, columns, dtype, copy) 
    275           copy=False) 
    276    else: 
--> 277     raise PandasError('DataFrame constructor not properly called!') 
    278 
    279   NDFrame.__init__(self, mgr, fastpath=True) 

PandasError: DataFrame constructor not properly called! 

我不知道这是否是扁平化嵌套的字典正确的代码,但如果它是,你能否提出我可能做错了什么?

谢谢。

+1

你能否给我们提供一个模拟对象?我怀疑这是一个JSON文件? – biobirdman 2014-11-24 06:15:01

回答

0

我写这个来拼合嵌套字典。也可以帮助你。 pk变成前一个关键字的字符串,而当前关键字用'来加入它们。 a成为项目列表。

a=[] 
heading=[] 
def flat_dict(dic,pk=None): 
    for k,v in dic.items(): 
     if isinstance(v, dict): 
      try: 
       flat_dict(v,pk+"'"+k) 
      except: 
       flat_dict(v,k) 
     else: 
      a.append(v) 
     try: 
      heading.append(pk+"'"+k) 
      # print pk+'\''+k,v 
     except: 
      heading.append(k) 
      # print k,v