Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将多个json节(全部在一个文件中)导入到python/pandas中_Python_Json_Python 3.x_Pandas_Json Normalize - Fatal编程技术网

如何将多个json节(全部在一个文件中)导入到python/pandas中

如何将多个json节(全部在一个文件中)导入到python/pandas中,python,json,python-3.x,pandas,json-normalize,Python,Json,Python 3.x,Pandas,Json Normalize,我正在尝试处理一个json文件,以便在另一个将使用excel文件的程序中使用。我的json文件有多个节/数组,其中一个用于存储一些基本信息,如记录数、报告名。它有用于列名的节/数组,然后是另一个将每一行/记录作为数组的节/数组 我曾尝试使用pandas.read_json和json_加载选项来读取中的数据,但不断出现错误。如果我删除了除一个(如行)部分之外的所有部分,我可以让它读入(尽管它将所有列放在一列中,就像它没有将每个用逗号分隔的列名标识为单独的列一样) 理想情况下,我不需要手动编辑此文件

我正在尝试处理一个json文件,以便在另一个将使用excel文件的程序中使用。我的json文件有多个节/数组,其中一个用于存储一些基本信息,如记录数、报告名。它有用于列名的节/数组,然后是另一个将每一行/记录作为数组的节/数组

我曾尝试使用pandas.read_json和json_加载选项来读取中的数据,但不断出现错误。如果我删除了除一个(如行)部分之外的所有部分,我可以让它读入(尽管它将所有列放在一列中,就像它没有将每个用逗号分隔的列名标识为单独的列一样)

理想情况下,我不需要手动编辑此文件,只需在python中将其处理为pandas数据帧,这样我就可以进一步操作它并将其导出以供其他使用

任何帮助都将不胜感激。这是我的第一篇帖子,如果有什么我能做得更好的,请告诉我

这里是json数据的表示,实际数据有更多的列和更多的行/记录(通常为700多条)

我试图让columnNames部分成为pandas数据框架中的列名,并使每个“行”成为数据框架中的记录

我试过看其他的例子,但是我没有遇到类似的json格式的问题

我尝试过使用pandas.read_json(“example.json”)和json.loads来加载数据,但它们都会出现不同的错误,我似乎无法避免

运行pandas.read_json(“example.json”)时,它会返回“数组的长度必须相同”


结果应该是columnNames节/数组应该是pandas数据帧的列名,然后是我希望成为数据帧中记录的每一行。

我将给出一般方法,我认为您可以在此基础上进行构建

  • 创建具有三个虚拟列名的数据帧
  • 根据需要插入所有行
  • 使用json的
    columnNames
    段重命名列

因为我还没有看到您完整的json文件,我不知道这是否能满足您的所有需要,但根据您的测试数据,这确实会使用json格式的字典中的数据创建一个df

import pandas as pd

test_dict={
    "count": 2,
    "name": "report1",
    "columnNames": [
        "Incident ID",
        "Status",
        "Subject"
    ],
    "rows": [
        [
            "2460636",
            "Resolved",
            "login help"
        ],
        [
            "2460637",
            "Unresolved",
            "email help"
        ]
        ]
    }

def make_df(json_dat): #use this function every time you want to make new df from json
    indicent_id=[]
    status=[]
    subject=[]

    for row in json_dat.get('rows'): #loop for all rows in df and append data to lists
        indicent_id.append(row[0])
        status.append(row[1])
        subject.append(row[2])

    #create pandas df from data
    df=pd.DataFrame([indicent_id, status, subject],
                    index=['indicent_id', 'status', 'subject']).T

    return df

#you can call the function now every time you need to make a df, potentially generating a dictionary of dfs based on the name of the json files 

df1= make_df(test_dict)
使用
pd.json\u normalize
:解压缩
json
文件

输出:

                       columnNames  count  name                            rows
0   [Incident ID, Status, Subject]  2   report1 [[2460636, Resolved, login help], [2460637, Un...
解包

df_rows = pd.json_normalize(data, record_path=['rows'], meta=['name'])
df_rows.rename({0: data['columnNames'][0],
                1: data['columnNames'][1],
                2: data['columnNames'][2]}, axis=1, inplace=True) 
df_行的输出

     Incident ID        Status       Subject       name
0        2460636      Resolved    login help    report1
1        2460637    Unresolved    email help    report1
json
格式不是特别好,下面这样的东西更容易解包:

{
    "count": 2,
    "name": "report1",
    "rows": [{
            "Incident ID": "2460636",
            "Status": "Resolved",
            "Subject": "login help"
        }, {
            "Incident ID": "2460637",
            "Status": "Unresolved",
            "Subject": "email help"
        }
    ]
}

我会看看我是否能做到这一点。我遇到的部分问题是让Python将json文件作为对象导入,然后我可以从中获取特定的节数据。我可以将文件作为字符串数据导入,但不确定如何将特定节段(如行或列节数据)填充到数据框中。谢谢,我正在查看g现在就看这个。有没有办法不使用json数据在python中创建dict,让它从一个文件读入dict?我将通过对oracle报告的API调用来获取这个json数据,所以我可能不需要从一个文件中读取,但希望在我尝试获取该文件的其他部分时验证它是否正常工作。错误I当我试图将这个json文件传递给dict变量时,get是“'str'对象没有属性'get'”哦,是的,你必须在json文件中读取
json”包。这将创建一个与你展示的字典类似的字典。你可以看到一个[示例](https://stackabuse.com/reading-and-writing-json-to-a-file-in-python),或阅读
json`。太棒了,谢谢!我更新了我的代码,并将其扩展到包含整个json文件,它现在可以工作了,并且在一个熊猫数据框架中。谢谢!你帮了我很大的忙。
     Incident ID        Status       Subject       name
0        2460636      Resolved    login help    report1
1        2460637    Unresolved    email help    report1
{
    "count": 2,
    "name": "report1",
    "rows": [{
            "Incident ID": "2460636",
            "Status": "Resolved",
            "Subject": "login help"
        }, {
            "Incident ID": "2460637",
            "Status": "Unresolved",
            "Subject": "email help"
        }
    ]
}