如何将Json从GET请求转换为Pandas DataFrame

时间:2019-08-30 12:21:47

标签: python json pandas post python-requests

我正在使用GoToWebinar API从网络研讨会中获取数据。 我做了所有事情,但脚本中唯一缺少的是将Json转换为大熊猫的数据框,以便我可以进行分析。

我得到的Json文件具有以下结构(我屏蔽了数据):

{
  "_embedded": {
    "webinars": [
      {
        "webinarKey": "GGGGGGGGGGGGGGGG",
        "webinarId": "BBBBBBBBBBB",
        "organizerKey": "RRRRRRRRRRRRR",
        "omid": "RRRRRRRRRRR",
        "accountKey": "WWWWWWWWWWW",
        "recurrenceKey": "EEEEEEEEEEEEEEEEE21",
        "subject": "LEEEEEEEEEESEon",
        "description": "EEEEEEEEEEEEE",
        "times": [
          {
            "startTime": "2019-07-01T13:00:00Z",
            "endTime": "2019-07-01T13:30:00Z"
          }
        ],
        "timeZone": "America/New_York",
        "locale": "en_US",
        "status": "UPDATED",
        "approvalType": "AUTOMATIC",
        "registrationUrl": "https://attendee.gotowebinar.com/rt/XXXXXXXXXXXXXXXX",
        "impromptu": false,
        "isPasswordProtected": false,
        "recurrenceType": "series",
        "experienceType": "broadcast",
        "registrationSettingsKey": "DDDDDDDD"
      },
      {
        "webinarKey": "GGGGGGGGGGGGGGGG",
        "webinarId": "BBBBBBBBBBB",
        "organizerKey": "RRRRRRRRRRRRR",
        "omid": "RRRRRRRRRRR",
        "accountKey": "WWWWWWWWWWW",
        "recurrenceKey": "EEEEEEEEEEEEEEEEE21",
        "subject": "LEEEEEEEEEESEon",
        "description": "EEEEEEEEEEEEE",
        "times": [
          {
            "startTime": "2019-07-01T13:00:00Z",
            "endTime": "2019-07-01T13:30:00Z"
          }
        ],
        "timeZone": "America/New_York",
        "locale": "en_US",
        "status": "UPDATED",
        "approvalType": "AUTOMATIC",
        "registrationUrl": "https://attendee.gotowebinar.com/rt/XXXXXXXXXXXXXXXX",
        "impromptu": false,
        "isPasswordProtected": false,
        "recurrenceType": "series",
        "experienceType": "broadcast",
        "registrationSettingsKey": "DDDDDDDD"
      },
..other webinars.....
 ]
  },
  "page": {
    "size": 10,
    "totalElements": 26,
    "totalPages": 3,
    "number": 0
  }
}

这是我的代码,我基本上不知道如何进行。 我尝试了DataFrame.from_dict,read_json以及此处提供的解决方案:Convert JSON data from Request into Pandas DataFrame

'''Getting the webinar lists'''
base_url = 'https://api.getgo.com/G2W/rest/v2'

##setting up paramters
param_1 = '2019-07-01T10%3A00%3A00Z'
param_2 = '2019-09-01T10%3A00%3A00Z'

##buidling the path
path = base_url + '/accounts/' + account_key + '/webinars?fromTime=' + param_1 +'&toTime=' + param_2
print(path)

headers = {'accept' : 'application/json' , 'Authorization' : access_token}

webinars_req = session.get(path, headers = headers)

webinars_json = webinars_req.json()

我想要一个具有所有内部标签(例如webinarkey,webinarid等)的数据框作为具有对应值的列...

希望你们能提供帮助!

3 个答案:

答案 0 :(得分:0)

您可以尝试requests模块

import requests

webinars_req = requests.get(path, headers = headers)
df = pd.read_json(webinars_req.text, ignore_index=True)

答案 1 :(得分:0)

好吧,我做到了! 基本上,我只需要在网络研讨会级别从字典中获取列表,然后将其放入数据框即可:

webinars_json = webinars_req.json()

##put all webinars data in a dataframe

webinars_list = webinars_json.get('_embedded').get('webinars')
df_webinars = pd.DataFrame(webinars_list)

效果很好:-) 希望这会帮助某人

答案 2 :(得分:0)

js = { "_embedded": { "webinars": [ { "webinarKey": "GGGGGGGGGGGGGGGG", "webinarId": "BBBBBBBBBBB", "organizerKey": "RRRRRRRRRRRRR", "omid": "RRRRRRRRRRR", "accountKey": "WWWWWWWWWWW", "recurrenceKey": "EEEEEEEEEEEEEEEEE21", "subject": "LEEEEEEEEEESEon", "description": "EEEEEEEEEEEEE", "times": [ { "startTime": "2019-07-01T13:00:00Z", "endTime": "2019-07-01T13:30:00Z" } ], "timeZone": "America/New_York", "locale": "en_US", "status": "UPDATED", "approvalType": "AUTOMATIC", "registrationUrl": "https://attendee.gotowebinar.com/rt/XXXXXXXXXXXXXXXX", "impromptu": "false", "isPasswordProtected": "false", "recurrenceType": "series", "experienceType": "broadcast", "registrationSettingsKey": "DDDDDDDD" }, { "webinarKey": "GGGGGGGGGGGGGGGG", "webinarId": "BBBBBBBBBBB", "organizerKey": "RRRRRRRRRRRRR", "omid": "RRRRRRRRRRR", "accountKey": "WWWWWWWWWWW", "recurrenceKey": "EEEEEEEEEEEEEEEEE21", "subject": "LEEEEEEEEEESEon", "description": "EEEEEEEEEEEEE", "times": [ { "startTime": "2019-07-01T13:00:00Z", "endTime": "2019-07-01T13:30:00Z" } ], "timeZone": "America/New_York", "locale": "en_US", "status": "UPDATED", "approvalType": "AUTOMATIC", "registrationUrl": "https://attendee.gotowebinar.com/rt/XXXXXXXXXXXXXXXX", "impromptu": "false", "isPasswordProtected": "false", "recurrenceType": "series", "experienceType": "broadcast", "registrationSettingsKey": "DDDDDDDD" } ] } }

import json 
from pandas.io.json import json_normalize 
s = json.dumps(js) #convert dict to string 
data = json.loads(s) #load str as json 
#also look at meta arguments for json_normalize 
df = json_normalize(data=data['_embedded'], record_path=['webinars'])