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

0 人关注

我正试图处理一个json文件,以便在另一个将使用excel文件的程序中使用。我的json文件有多个部分/数组,一个是一些基本信息,如记录数,报告名称。它还有列名的部分/数组,然后是另一个数组,每个单独的行/记录都是一个数组。

我试着用pandas.read_json和json_loads选项来读入数据,但我不断地得到错误。 如果我删除所有的部分,只删除一个部分(比如行),我可以让它读进去(尽管它把所有的列放在一个列里,好像它没有把每个用逗号隔开的列名识别为一个单独的列。

理想情况下,我希望不需要手动编辑这个文件,只需要在python中把它处理成一个pandas数据框,这样我就可以进一步处理它,并把它导出用于其他用途。

如果有任何帮助,我们将不胜感激。这是我的第一篇帖子,所以如果有什么我可以做得更好的地方,请告诉我!

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

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

我试图让columnNames部分成为pandas数据框架中的列名,并让每条 "行 "成为数据框架中的一条记录。

我试着看了看其他的例子,但我没有遇到类似的问题,json的格式是这样的。

我试着用pandas.read_json("example.json")以及json.load来加载数据以获得它,但它们都出现了不同的错误,我似乎无法解决。

当运行pandas.read_json("example.json")时,它回来说 "数组必须都是相同长度"。

结果应该是columnNames部分/array应该是pandas数据框架的列名,然后每条 "行 "我想成为数据框架中的一条记录。

python
json
python-3.x
pandas
json-normalize
pgsteven89
pgsteven89
发布于 2019-07-31
3 个回答
Trenton McKinney
Trenton McKinney
发布于 2019-07-31
已采纳
0 人赞同

Use pd.json_normalize : to unpack your json file

pd.json_normalize

import pandas as pd
import json
with open('test.json') as f:
    data = json.load(f)
json_data = pd.json_normalize(data)

Output:

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

Unpack rows:

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) 

Output of df_row:

     Incident ID        Status       Subject       name
0        2460636      Resolved    login help    report1
1        2460637    Unresolved    email help    report1

替换代码1】不是特别好形成,像下面这样的东西会更容易解读。

"count": 2, "name": "report1", "rows": [{ "Incident ID": "2460636", "Status": "Resolved", "Subject": "login help" "Incident ID": "2460637", "Status": "Unresolved", "Subject": "email help"
这真是太棒了,谢谢你我更新了我的代码,把它扩展到包括我的整个json文件,它现在可以工作了,而且是在一个pandas数据框架中。谢谢你!你非常有帮助。
bart cubrich
bart cubrich
发布于 2019-07-31
0 人赞同

因为我没有看到你的完整的json文件,我不知道这是否能做到你所需要的一切,但根据你的测试数据,这确实是用json格式的字典的数据创建了一个pandas 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)
    
谢谢你,我现在正在看这个。有没有什么方法可以代替在python中用json数据创建dict,让它从文件中读取json数据到dict中?我将通过对oracle报告的API调用来获取json数据,所以我可能不需要从文件中读取,但在我尝试获取其他部分时,我想确认这是否有效。当我试图将这个json文件传入dict变量时,我得到的错误是"'str'对象没有'get'属性"
哦,是的,你必须在json文件中读取 json' package. That will create a dictionary that looks just like the one you showed. You can see an [example](https://stackabuse.com/reading-and-writing-json-to-a-file-in-python), or read the json`。 文件 .
LazyCoder
LazyCoder
发布于 2019-07-31
0 人赞同

我将给你一般的方法,我想你可以在此基础上进行。