2017-01-20 2 views
1

Я пытаюсь разработать приложение для извлечения цен на акции (в JSON), а затем сделайте некоторый анализ на них. Моя проблема заключается в получении ответа JSON в pandas DataFrame, где я могу работать. Вот мой код:Python: Создайте DataFrame из частей ответа JSON

''' 
References 
http://stackoverflow.com/questions/6862770/python-3-let-json-object- accept-bytes-or-let-urlopen-output-strings 
''' 
import json 
import pandas as pd 
from urllib.request import urlopen 

#set API call 
url = "https://www.quandl.com/api/v3/datasets/WIKI/AAPL.json?start_date=2017-01-01&end_date=2017-01-31" 

#make call and receive response 
response = urlopen(url).read().decode('utf8') 
dataresponse = json.loads(response) 

#check incoming 
#print(dataresponse) 

df = pd.read_json(dataresponse) 

print(df) 

Ошибки приложения в df = pd.read_json... с ошибкой TypeError: Ожидаемая строка или Unicode.

Итак, я считаю, что это первое препятствие.

Вторым становится все, где мне нужно. Ответ JSON содержит только два массива, которые меня интересуют, column_names и data. Как извлечь только эти два и вставить в pandas DataFrame?

+1

'pd.read_json' принимает строку JSON непосредственно, так что это:' pd.read_json (ответ) ' – IanS

ответ

4

Чтобы ответить на ваш первый вопрос, pd.read_json принимает строку JSON непосредственно, так что вы должны делать это:

pd.read_json(response) 

Но вместо того, учитывая, как структурирована данные, то лучше сначала преобразовать JSON строку в словарь, содержащий данные:

d = json.loads(response) 

Тогда просто построить dataframe из d['dataset']['data'] и d['dataset']['column_names'] :

pd.DataFrame(data=d['dataset']['data'], columns=d['dataset']['column_names']) 
+0

Спасибо Ians. Это сработало. – skywalker

Смежные вопросы