Строка разбора Python, списки - PullRequest
0 голосов
/ 01 ноября 2018

В настоящее время я пытаюсь разобрать следующую строку - ответ на запрос API - https://api.iextrading.com/1.0/deep/book?symbols=goog

вывод этого API

{ "GOOG": { "ставки": [{ "цена": 1030,79, "размер": 100, "метка": 1541428203560}, { "цена": 1003,79, "размер": 200, "метка времени" : 1541429104723}], "спрашивает": [{ "цена": 1040.62, "размер": 100, "метка времени": 1541429609821}, { "цена": 1084,79, "размер": 100, "метка времени": 1541428203541}, {"цена": 1111,79, "размер": 200, "метка времени": 1541428981007}]}}

Нужно получить значения price и size из выходных данных как заявок, так и запросов. Чтобы сохранить его во фреймах данных или другом работоспособном формате.

Спасибо за вашу помощь!


Мне удалось получить первую строку каждой из них, отформатировав ее в fdataframe и индексировав, как

a = pd.read_json(url).dropna()
r = pd.DataFrame(a)
print(r.iloc[0][0][0])

Ответ

{'timestamp': 1541428203541, 'price': 1084.79, 'size': 100}

но мне все равно нужно как-то разобрать, чтобы получить price и size значения ...

1 Ответ

0 голосов
/ 01 ноября 2018

Предполагая, что это JSON; используйте json.loads, чтобы преобразовать его во вложенный словарь.

>>> line = '{"GOOG":{"bids":[{"price":1070.92,"size":100,"timestamp":1541089522066}],"asks":[]}}'
>>> d = json.loads(line)
>>> d["GOOG"]["bids"][0]["price"]
1070.92
>>> d["GOOG"]["bids"][0]["size"]
100

Из комментариев:

url = "api.iextrading.com/1.0/deep/book?symbols=goog"
d = json.loads(url)`

Проблема в том, что вы пытаетесь проанализировать сам URL как строку JSON. Это не то, что делает json.loads. Вместо этого вы должны сначала прочитать содержимое этого URL, например, используйте urllib или просто используйте pandas.read_json, как вы уже делали в другом коде в вашем вопросе:

>>> d = pd.read_json(url).to_dict()
>>> d["GOOG"]["bids"][0]["price"]
1037.23
...