将带有嵌套字典的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数据框[重复]的主要内容,如果未能解决你的问题,请参考以下文章