【问题标题】:Convert JSON to Pandas Dataframe in Python在 Python 中将 JSON 转换为 Pandas 数据框
【发布时间】:2020-12-31 11:28:11
【问题描述】:

有json格式的数据如下:

dict = {"a":1,"b":2,"c":[{dic 1},{dic2},...so on]}

下面定义了 dic 1,就像这个字典列表一样

dic 1 = {"d":4,"e":{"f":6,"g":7},"h":{"i":9,"j":[10,11,12]},"m":13}

所以,整个 json 文件如下所示:

dict = {"a":1,"b":2,"c":[{"d":4,"e":{"f":6,"g":7},"h":{"i":9,"j":[10,11,12]},"m":13},{dic2},...so on]}

现在我想将这些数据存储为如下表所示的 Pandas Dataframe,请提出您的建议

预期输出:

【问题讨论】:

  • 您没有解释嵌套在 dict 内的 dict 列表中应该发生什么...请解释这一点以使问题可以回答...在您的情况下,dict1 和 dict2 中发生了什么具有相同的键?

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


【解决方案1】:

你的 json 结构很复杂!让它变得简单!

您的代码不会运行,返回不可散列的类型“dict”。要解决此问题,只需解压缩您在主“dict”(即 **dic1)中使用的任何变量。

即使这样,您也会以 2 行和 3 列结束。为什么?键“c”中的数据是字典列表,pandas 将列表项解释为列的数据。整理json文件。

最后,避免使用 'dict' 来命名变量。

【讨论】:

    【解决方案2】:

    试试这个

    import json
    import pandas as pd
    from glob import glob
    import matplotlib.pyplot as plt
    
    #Convert json string to a flat python dictionary
    
    def convert(x):
        ob = json.loads(x)
        for k, v in ob.copy().items():
            if isinstance(v, list):
                ob[k] = ','.join(v)
            elif isinstance(v, dict):
                for kk, vv in v.items():
                    ob['%s_%s' % (k, kk)] = vv
                del ob[k]
        return ob
    
    for json_filename in glob('*.json'):
        csv_filename = '%s.csv' % json_filename[:-5]
        print('Converting %s to %s' % (json_filename, csv_filename))
        df = pd.DataFrame([convert(line) for line in open(json_filename, encoding='utf-8')])
        df.to_csv(csv_filename, encoding='utf-8', index=False)
    
    #Convert csv to pdf
    data1 = pd.read_csv('data1.csv')
    data2 = pd.read_csv('data2.csv')
    data3 = pd.read_csv('data3csv')
    data4 = pd.read_csv('data4.csv')
    data5 = pd.read_csv('data5.csv')
    

    https://gist.github.com/Elsaveram/3258db49eaac5e258401338ae17139a3

    【讨论】:

      【解决方案3】:

      将所有字典以 .json 格式保存在文件中 像这样

      import json
      with open('dict.json', 'w') as fp:
      json.dump(dict, fp,sort_keys=True, indent=4)
      

      那就试试这个

            df_json = pd.read_json(r'filepath\dict.json', lines=True)
      

      如果它不起作用,我们将找出一个正则表达式来读取内部的复杂性。 不要忘记导入 pandas 和 json ,pandas 大部分时间都可以处理所有的复杂性。这将比使用正则表达式和转换为 csv 文件所需的时间短得多。

      【讨论】:

        猜你喜欢
        • 2019-05-14
        • 2021-09-27
        • 2019-07-01
        • 2021-12-13
        • 1970-01-01
        • 2014-08-19
        • 1970-01-01
        • 2018-11-20
        • 1970-01-01
        相关资源
        最近更新 更多