Рубрики
Без рубрики

Данные JSON в pandas df без метода read_json()

Как работать с данными JSON в python

Автор оригинала: Anthony Carnevale.

Работа с данными JSON; втягивание их и чтение-это то, с чем я значительно боролся, когда начинал кодировать. Эта статья предназначена для тех, кто сталкивается с этой проблемой или просто хочет иметь другую точку зрения.

Недавно мне было предложено создать анализ настроений из данных Twitter; поэтому я создал эту конечную точку api, и ее можно использовать для этого примера.

Для доступа к этим данным нам нужны библиотеки json и request или мы можем использовать встроенный метод pandas read_json (). Мы не будем использовать метод pd.read_json (), потому что это хорошая практика и полезно знать, что происходит при использовании данных вне панд, например, в js. Переход от Python к Javascript изучение того, как работать с объектами json более подробно, значительно облегчит сбор js. На практике очевидно, что было бы более разумно просто использовать метод read_json, а затем передать соответствующий параметр “orient”. https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_json.html

import json, requests

response = requests.get("http://www.sportsbookanalysis.com/restapi/tweets/?format=json")
print(response)

Этот <Ответ [200]> был одним из моих первых “gothas”, потому что я вижу это, однако это просто дает нам код статуса 200, который хорошо видеть в нашем случае. Однако для доступа к фактическим данным нам нужен файл .json()

response = requests.get("http://www.sportsbookanalysis.com/restapi/tweets/?format=json").json()
# Dont print this as its fairly large

Отсюда мы можем видеть, что происходит с данными. Это может быть удар или промах, но первое, что я пытаюсь сделать, это просто распечатать ключи данных. Если это не удается, это означает, что данные находятся в списке, поэтому мы можем использовать индексацию

print(response.keys())
#AttributeError: 'list' object has no attribute 'keys'
print(len(response))
print(response[1250])
#output {'id': 42750, 'team': 'NYG', 'sport': 'NFL', 'tw_time': '2019-07-27T11:00:26Z', 
#'tweet': "Giants' Saquon Barkley rips Daniel Jones critics: You don't know football #nyg #giants #NFL https://t.co/5T6oz6sRc3", 
#'score': -0.296, 'followers': 3688}

print(response[1250].keys())
#dict_keys(['id', 'team', 'sport', 'tw_time', 'tweet', 'score', 'followers'])
#and finally we can do soemthing like
for i in response[1250].keys():
    print("{}:{}".format(i,response[1250][i]))
#output id:42750
#team:NYG
#sport:NFL
#tw_time:2019-07-27T11:00:26Z
#tweet:Giants' Saquon Barkley rips Daniel Jones critics: You don't know football #nyg #giants #NFL https://t.co/5T6oz6sRc3
#score:-0.296
#followers:3688

Идя еще дальше, мы можем извлечь все данные команды и оценки в отдельные списки, а затем назначить их пустым фреймам данных.

team = []
score = []
timeposted = []
for x in response:
        team.append(x['team'])
        score.append(x['score'])
        timeposted.append(x['tw_time'])
df = pd.DataFrame() # create empty dataframe 
df['score'] = score 
df['team'] = team
df['timeposted'] = timeposted ###add new columns based off lists

print(df.head())