【问题标题】:Nested JSON with Pandas使用 Pandas 嵌套 JSON
【发布时间】:2015-08-02 06:42:36
【问题描述】:

我正在尝试从下面的 JSON 文件创建一个数据框。我一直在使用d1 = pd.read_json('user.json'),但这并不是为嵌套值accessToken,facebookId 等创建列。

有没有一种简单的方法可以让 pandas 处理这些嵌套值?

这个问题已经在别处被问过了,但我需要将嵌套值作为列输入到更大的数据框中。

{
"_id": 11,
"claimToFame": "Send me some tunes...or your GitHub!",
"commentCount": 230,
"coverImage": "img.jpg",
"currentLanguage": "en-GB",
"dateOfBirth": "07/29/1982",
"email": "l@gmail.com",
"facebookDetails":    {
        "accessToken": "123",
        "facebookId": "123"
    }
,
"facebookId": 1,
"firstName": "David",
"followerCount": 422403,
"following": false,
"followingCount": 253,
"googleDetails": 
    {
        "googleId": "111411986454983058357",
        "accessToken": "123"
    }
}

【问题讨论】:

    标签: python json pandas ipython ipython-notebook


    【解决方案1】:

    将您的数据放在文件对象FILEOBJECT 中,使用 json 模块将数据加载到 python 结构中

    import json
    jsondata = json.load(FILEOBJECT)
    

    然后您可以使用 json_normalize 函数创建数据帧

    import pandas as pd
    usable_dataframe = pd.io.json.json_normalize(jsondata)
    

    在您的情况下,这将导致这些列的数据框:

    [_id、claimToFame、commentCount、coverImage、currentLanguage、dateOfBirth、电子邮件、facebookDetails.accessToken、facebookDetails.facebookId、facebookId、firstName、followerCount、following、followingCount、googleDetails.accessToken、googleDetails.googleId]

    【讨论】:

      【解决方案2】:

      这是一种方法:

      import pandas as pd
      import json
      
      data = json.dumps([{
      "_id": 11,
      "claimToFame": "Send me some tunes...or your GitHub!",
      "commentCount": 230,
      "coverImage": "img.jpg",
      "currentLanguage": "en-GB",
      "dateOfBirth": "07/29/1982",
      "email": "l@gmail.com",
      "facebookDetails":    {
              "accessToken": "123",
              "facebookId": "123"
          }
      ,
      "facebookId": 1,
      "firstName": "David",
      "followerCount": 422403,
      "following": False,
      "followingCount": 253,
      "googleDetails": 
          {
              "googleId": "111411986454983058357",
              "accessToken": "123"
          }
      }], separators=(',',':'))
      
      pd.read_json(data)
      

      【讨论】:

      • 您好,经过进一步测试后效果很好,但您能帮我做一件事吗?例如 facebookDteails 列现在包含: "{ "accessToken": "123", "facebookId": "123" }" 有没有办法在自己的列中获取 accessToken 和 facebookId?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-10-31
      • 2018-05-29
      • 2019-05-24
      • 2015-10-19
      • 1970-01-01
      • 2021-08-26
      • 2021-08-13
      相关资源
      最近更新 更多