【问题标题】:How to create a data frame from a deeply nested dictionary?如何从深度嵌套的字典中创建数据框?
【发布时间】:2014-11-24 06:04:46
【问题描述】:

我有一个嵌套字典,它有 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!

我不确定这是否是展平嵌套字典的正确代码,但如果是,您能否建议我可能做错了什么?

谢谢。

【问题讨论】:

  • 你能给我们提供一个模拟对象吗?我怀疑这是一个 json 文件?

标签: python dictionary pandas


【解决方案1】:

我写这个是为了扁平化嵌套的字典。也可能对你有所帮助。 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

【讨论】:

    猜你喜欢
    • 2022-06-13
    • 2021-11-16
    • 2022-01-13
    • 1970-01-01
    • 2022-06-13
    • 2018-05-14
    • 1970-01-01
    相关资源
    最近更新 更多