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

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

预计输出将在 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

标签: python json python-3.x pandas dataframe


【解决方案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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-05
      • 1970-01-01
      • 2014-02-24
      • 1970-01-01
      • 1970-01-01
      • 2016-12-01
      • 2021-10-24
      • 1970-01-01
      相关资源
      最近更新 更多