如何从带有列表的嵌套 Json 创建 pandas DataFrame

Posted

技术标签:

【中文标题】如何从带有列表的嵌套 Json 创建 pandas DataFrame【英文标题】:How to create pandas DataFrame from nested Json with list 【发布时间】:2020-12-26 05:36:12 【问题描述】:

预计输出将在 DataFrame 中有 9 列(数据从服务器检索), 试过pd.json_normalize(),但没用

'\n
  "a": "1",\n
  "b": "2",\n
  "c": "3",\n
  "d": "4",\n
  "cd": [\n
    \n 
      "i": "1",\n
      "ii": "2",\n
      "iii": "3",\n
      "iv": "4",\n
      "v": "5"
    \n
  ]\n
'

【问题讨论】:

那么列应该是a、b、c、d、i、ii、iii、iv和v? 这能回答你的问题吗? Pandas read nested json 【参考方案1】:

这是一个简单的解决方案。您需要使用 json_normalize 并将记录路径设置为 'cd' 列。

import json
import pandas as pd


js = '\n "a": "1",\n "b": "2",\n "c": "3",\n "d": "4",\n "cd": ["i": "1",\n "ii": "2",\n "iii": "3",\n "iv": "4",\n "v": "5"]'
js = json.loads(js)

df = pd.json_normalize(js, record_path=['cd'], meta=['a', 'b', 'c', 'd'])
print(df)
# >    i ii iii iv  v  a  b  c  d
# > 0  1  2   3  4  5  1  2  3  4

如果您需要更深入地了解 json_normalize 函数,我建议您阅读此article。

【讨论】:

【参考方案2】:

看看,如果你觉得这个方法有用。

import pandas as pd
temp="""\n
  "a": "1",\n
  "b": "2",\n
  "c": "3",\n
  "d": "4",\n
  "cd": [\n
    \n 
      "i": "1",\n
      "ii": "2",\n
      "iii": "3",\n
      "iv": "4",\n
      "v": "5"
    \n
  ]\n
"""
temp=eval(temp.replace("\n",""))
df=pd.DataFrame()
i=0
for key,val in temp.items():
    if len(temp[key][0])>1:
        for k,v in temp[key][0].items():
            df.loc[i,k]=v
    else:
        df.loc[i,key]=val
        
print(df)

【讨论】:

以上是关于如何从带有列表的嵌套 Json 创建 pandas DataFrame的主要内容,如果未能解决你的问题,请参考以下文章

从嵌套的 json 列表中展平 Pandas DataFrame

Pandas:如何规范化具有多个 JSON 嵌套列表的 JSON 文件?

从深度嵌套的 JSON 创建 Pandas DataFrame

从 pandas 数据框创建嵌套 JSON

如何使用从 Flutter 中的 json 解析的嵌套映射列表中的函数创建对象

在带有数组的嵌套 Json 上使用 Pandas json_normalize