将带有嵌套字典的json响应转换为pandas数据框[重复]

Posted

技术标签:

【中文标题】将带有嵌套字典的json响应转换为pandas数据框[重复]【英文标题】:Convert json response with nested dictionaries to pandas dataframe [duplicate] 【发布时间】:2020-12-14 10:23:46 【问题描述】:

我有一个类似于以下内容的 json 响应:

d='results':[
    'key1':'1','key2':'item1',
    'key1':'1','key2':
            'subkey20':[
                    'subkey201':'val', 
                    'subkey202':val,
                    'subkey203':'val',
                    'subkey204':'value',
                    'subkey201':'val',
                    'subkey202':val,
                    'subkey203':'val',
                    'subkey204':'value',
                    'subkey201':'val',
                    'subkey202':val,
                    'subkey203':'val',
                    'subkey204':'value',
                    'subkey201':'val',
                    'subkey202':val,
                    'subkey203':'val',
                    'subkey204':'value'],
    'key1':'1','key2':'item1',
    'key1':'1','key2':
            'subkey20':[
                    'subkey201':'val', 
                    'subkey202':val,
                    'subkey203':'val',
                    'subkey204':'value',
                    'subkey201':'val',
                    'subkey202':val,
                    'subkey203':'val',
                    'subkey204':'value',
                    'subkey201':'val',
                    'subkey202':val,
                    'subkey203':'val',
                    'subkey204':'value',
                    'subkey201':'val',
                    'subkey202':val,
                    'subkey203':'val',
                    'subkey204':'value'],]

我目前正在将其处理成一个熊猫数据帧,每个键从 key1 开始,代表熊猫数据帧中的一列。到目前为止,我只能这样做:

    df = pd.concat([pd.DataFrame(v) for k,v in d.items()], keys=d)
    print (df)

这不会产生我想要的结果。我可以就如何导航并获得一个熊猫数据框获得帮助,其中所有键都作为列和值填充?

我确实尝试过使用 json_normalize,但它会将子键作为值处理到 key2 列中,而不是作为单独的列。

【问题讨论】:

你的例子不是一个完整的数据结构。如果您要求免费帮助,至少要让某人轻松... 检查here @dawg 嗨,对不起,我错过了那里的右括号,现在修复它。 【参考方案1】:

json_normalize() 是工具。只需使用它两次以及 explode()

pd.json_normalize(pd.json_normalize(d["results"]).explode("key2.subkey20").to_dict(orient="records"))

输出

key1   key2  key2.subkey20 key2.subkey20.subkey201 key2.subkey20.subkey202 key2.subkey20.subkey203 key2.subkey20.subkey204
   1  item1            NaN                     NaN                     NaN                     NaN                     NaN
   1    NaN            NaN                     val                     val                     val                   value
   1    NaN            NaN                     val                     val                     val                   value
   1    NaN            NaN                     val                     val                     val                   value
   1    NaN            NaN                     val                     val                     val                   value
   1  item1            NaN                     NaN                     NaN                     NaN                     NaN
   1    NaN            NaN                     val                     val                     val                   value
   1    NaN            NaN                     val                     val                     val                   value
   1    NaN            NaN                     val                     val                     val                   value
   1    NaN            NaN                     val                     val                     val                   value

【讨论】:

谢谢!这行得通!我相信我在使用 json_normalize 时走在了正确的轨道上,但我没有想到要使用它两次。 我已经与它搏斗了几次,并意识到保持简单......

以上是关于将带有嵌套字典的json响应转换为pandas数据框[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何自动将csv转换为pandas?

Python Pandas:将嵌套字典转换为数据框

将嵌套字典转换为 pandas 数据框并绘图

Python Flatten 用 Pandas 将嵌套字典 JSON 相乘

如何将 json 转换为 pandas 数据框?

pandas 将嵌套字典转换为 mutiIndex 行和列