【问题标题】:Nested JSON to DataFrame嵌套 JSON 到 DataFrame
【发布时间】:2020-07-16 23:23:31
【问题描述】:

我有一个像这样的 JSON 文件

{
   "AAPL":{
      "quote":{
         "symbol":"AAPL",
         "companyName":"Apple, Inc.",
         "primaryExchange":"SQDNAA",
         "calculationPrice":"close"
      }
   },
   "MSFT":{
      "quote":{
         "symbol":"MSFT",
         "companyName":"Microsoft Corp.",
         "primaryExchange":"QSAAND",
         "calculationPrice":"close",
      }
   }
}

如何将其转换为带有嵌套引号中列的 Pandas DataFrame? (符号、公司名称、primaryExchange 和计算价格)

【问题讨论】:

    标签: json python-3.x pandas


    【解决方案1】:

    您可以遍历字典并将其添加到列表中。

    d = yourjsonobject
    
    dfs = []
    for k, _ in d.items():
        for quote,v in _.items():
            dfs.append(pd.DataFrame(v,index=[k]))
    
    df = pd.concat(dfs)
    
    print(df)
    
         symbol      companyName primaryExchange calculationPrice
    AAPL   AAPL      Apple, Inc.          SQDNAA            close
    MSFT   MSFT  Microsoft Corp.          QSAAND            close
    

    【讨论】:

    • 这也是我想到的解决方案 - 使用循环并连接数据帧。我一直在寻找一个更快的过程,比如 json_normalize(),但我想这也可以。非常感谢!
    • @Vasilis 如果您使用 JSON 规范化,我认为您需要重构您的字典/json 对象
    【解决方案2】:

    你可以试试jmespath,因为它有一个很好的遍历 JSON 数据的方法:

     import jmespath
     #create a compiled expression
     #of the data path
     #similar to re.compile
     #it looks for the quote key and returns its contents
     expression = jmespath.compile('*.quote')
     A = expression.search(data)
    
    #read into a dataframe
     pd.DataFrame(A)
    
        symbol  companyName primaryExchange calculationPrice
    0   AAPL    Apple, Inc.       SQDNAA      close
    1   MSFT    Microsoft Corp.    QSAAND     close
    

    【讨论】:

      猜你喜欢
      • 2016-05-10
      • 1970-01-01
      • 2019-08-20
      • 2018-09-01
      • 2020-11-08
      • 2020-07-12
      • 2019-04-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多