【问题标题】:Pandas - Flatten irregular nested JSONPandas - 展平不规则的嵌套 JSON
【发布时间】:2020-08-28 22:27:25
【问题描述】:

我有以下 JSON 对象并尝试将其转换为 DataFrame。

数据:

{
  "data": {
    "docs": [
      {
        "id": "1",
        "col1": "foo",
        "col2": "123",
        "list": ["foo barr, fooo"]
      },
      {
         "id": "2",
        "col1": "abc",
        "col2": "321",
        "list": ["lirum epsum"]
      },
      {
         "id": "3",
        "col1": "foo",
        "col2": "123",
        "list": null
   
      }
      }
    ]
  }
}

理想情况下,列表列应该包含 字符串 而不是列表,如下所示:

id  col1    col2    list
1   foo     123     'foo barr, fooo'
2   abc     321     'lirum epsum'
3   foo     123      NaN

下面的方法是抛出异常(TypeError: 'NoneType' object is not iterable):

with open(path_to_json, encoding='utf-8') as json_file:
    q= json.load(json_file)
    df = json_normalize(q['data'], record_path=['docs', 'list'])

【问题讨论】:

  • 这能回答你的问题吗? How to flatten nest Json data with json_normalize
  • 你所谓的 JSON“对象”(实际上是一个字符串),有额外的 }, 字符。
  • 问题是'list'列保存为数据类型列表,应该保存为String。

标签: python json pandas


【解决方案1】:

我无法添加评论(还)来完成上面的答案,但您可以使用此代码将您的列列表转换为字符串

df['list']=df['list'].apply(lambda x: str(x).strip('[\']'))

【讨论】:

    【解决方案2】:
    json = {
      "data": {
        "docs": [
          {
            "id": "1",
            "col1": "foo",
            "col2": "123",
            "list": ["foo barr, fooo"]
          },
          {
             "id": "2",
            "col1": "abc",
            "col2": "321",
            "list": ["lirum epsum"]
          },
          {
             "id": "3",
            "col1": "foo",
            "col2": "123",
            "list": np.nan
       
          },
          
        ]
      }
    }
    pd.DataFrame(json["data"]["docs"]).set_index("id")
    

    给你

        id  col1    col2    list
        1   foo     123     [foo barr, fooo]
        2   abc     321     [lirum epsum]
        3   foo     123     NaN
    

    【讨论】:

    • 然后您可以使用.str.join(', ') 将list 列转换为字符串
    • 它还在括号中并保存为列表
    猜你喜欢
    • 1970-01-01
    • 2023-03-07
    • 2021-10-09
    • 2017-04-19
    • 2021-12-31
    • 2016-12-01
    • 2022-11-23
    • 2022-06-11
    • 2020-09-27
    相关资源
    最近更新 更多