将JSON读取到pandas dataframe - ValueError:将dicts与非Series混合可能会导致模糊排序

use*_*Geo 12 python json pandas

我试图在下面的JSON结构中读入pandas dataframe,但它抛出了错误消息:

ValueError:将dicts与非Series混合可能会导致模糊排序.

Json数据:

{
    "status": {
        "statuscode": 200,
        "statusmessage": "Everything OK"
    },

    "result": [{
        "id": 22,
        "club_id": 16182
    }, {
        "id": 23,
        "club_id": 16182
    }, {
        "id": 24,
        "club_id": 16182
    }, {
        "id": 25,
        "club_id": 16182
    }, {
        "id": 26,
        "club_id": 16182
    }, {
        "id": 27,
        "club_id": 16182
    }]
}
Run Code Online (Sandbox Code Playgroud)

我怎么做到这一点?我试过下面的脚本......

j_df = pd.read_json('json_file.json')
j_df

with open(j_file) as jsonfile:
    data = json.load(jsonfile)
Run Code Online (Sandbox Code Playgroud)

Rao*_*hab 10

如果您只需要数据框中的结果部分,那么这里是帮助您的代码.

import json
import pandas as pd
data = json.load(open('json_file.json'))

df = pd.DataFrame(data["result"])
Run Code Online (Sandbox Code Playgroud)

  • 如果我需要所有变量而不仅仅是“结果”怎么办? (6认同)

jez*_*ael 9

你可以用json_normalizeassign

from pandas.io.json import json_normalize
import json

with open('json_file.json') as data_file:    
    d= json.load(data_file)  

df = json_normalize(d, 'result').assign(**d['status'])
print (df)
   club_id  id  statuscode  statusmessage
0    16182  22         200  Everything OK
1    16182  23         200  Everything OK
2    16182  24         200  Everything OK
3    16182  25         200  Everything OK
4    16182  26         200  Everything OK
5    16182  27         200  Everything OK
Run Code Online (Sandbox Code Playgroud)


小智 8

如果您只需要数据框中的结果部分,下面的代码可以帮助您:

import json
import pandas as pd
data = json.load(open('json_file.json'))

df = pd.DataFrame(data["result"])
Run Code Online (Sandbox Code Playgroud)

据我所知,发生 ValueError 的原因是数据类型到处都是,一些字符串,一些列表,多个 {} 等。这个错误可以通过规范化数据来解决。为此,代码如下:

import json

with open('json_file.json') as project_file:    
    data = json.load(project_file)  

df = pd.json_normalize(data)
Run Code Online (Sandbox Code Playgroud)