Как перебирать вложенные дикты с датами в качестве ключа - PullRequest
0 голосов
/ 14 апреля 2019

Я пытаюсь создать набор данных с датами и ценами закрытия для тикеров, чтобы мой набор данных выглядел следующим образом:

                  AAPL
2019-01-01       157.92
2019-01-02       157.92

Я нашел API, который выдает json ответ на запрос:

r = requests.get(url)
data = r.json()
print(data)

{'name': 'AAPL', 'history': {'2019-01-01': {'open': '154.89', 'close': '157.92', 'high': '158.85', 'low': '154.23', 'volume': '37039737'}}}
{'name': 'AAPL', 'history': {'2019-01-02': {'open': '154.89', 'close': '157.92', 'high': '158.85', 'low': '154.23', 'volume': '37039737'}}}

Поскольку мне нужно углубиться во вложенные дикты, у меня нет четкого понимания того, как это сделать, чтобы извлечь дату и цену закрытия.

Я попробовал следующее, и вариация следующего слонялась по Интернету, но не нашел четкого способа, как это делается или как работает логика:

for k,v in data.items():
        print(k,v)

Как можно поступить в этой ситуации и как устроена логика?

ОБРАЗЕЦ ИЗ API: https://www.worldtradingdata.com/documentation#full-history

{
    "name": "AAPL",
    "history": {
        2019-04-12: {
            "open": "199.20",
            "close": "198.87",
            "high": "200.14",
            "low": "196.21",
            "volume": "27760668"
        },
        2019-04-11: {
            "open": "200.85",
            "close": "198.95",
            "high": "201.00",
            "low": "198.44",
            "volume": "20900808"
        ...
    }
}

1 Ответ

2 голосов
/ 14 апреля 2019

Вы можете использовать pandas.DataFrame.from_dict для создания фрейма данных:

import pandas as pd

data = {
    'name': 'AAPL',
    'history': {
        '2019-04-12': {
            'open': '199.20',
            'close': '198.87',
            'high': '200.14',
            'low': '196.21',
            'volume': '27760668'
        },
        '2019-04-11': {
            'open': '200.85',
            'close': '198.95',
            'high': '201.00',
            'low': '198.44',
            'volume': '20900808'
        },
    }
}

df = pd.DataFrame.from_dict(data['history'], orient='index')

Что дает следующий фрейм данных:

              open   close    high     low    volume
2019-04-11  200.85  198.95  201.00  198.44  20900808
2019-04-12  199.20  198.87  200.14  196.21  27760668
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...