【发布时间】:2019-10-06 05:51:14
【问题描述】:
我正在从 TD Ameritrade API 中提取股票数据,并将其存储在 DataFrame 中。
从 API 我得到一个嵌套的 JSON 对象,当我将它放入数据框中时,我得到 4 列:Index、Candles、Empty、Symbol。然而,蜡烛内部是一个字典,我希望它作为数据框中的单独列('open','close',...)
我试过json_normalize
和pd.io.json.json_normalize
都没有给我想要的结果
import pandas as pd
import requests
from pandas.io.json import json_normalize
endpoint = r'https://api.tdameritrade.com/v1/marketdata/{}/pricehistory'.format('GOOG')
client_id = 'AMSAFI1234567'
payload = {'apikey':client_id,
'periodType': 'day',
'frequencyType': 'minute',
'frequency' :'1',
'period':'2',
'endDate': '1556158524000',
'startDate': '1554535854000',
'needExtendedHoursData':'true'}
content = requests.get(url = endpoint, params = payload)
data = content.json()
print(data)
输出:
{'candles': [{'open': 1260.25, 'high': 1260.5, 'low': 1260.0, 'close': 1260.28,
'volume': 2544, 'datetime': 1556029980000}, {'open': 1260.39, 'high': 1260.61,
'low': 1260.3501, 'close': 1260.3501, 'volume': 1703, 'datetime':
1556030040000}, {'open': 1260.35, 'high': 1260.59, 'low': 1260.07, 'close':
1260.56, 'volume': 2156, 'datetime': 1556030100000}, {'open': 1260.56, 'high':
1260.56, 'low': 1259.27, 'close': 1259.7, 'volume': 1320, 'datetime':
1556030160000}, {'open': 1260.06, 'high': 1260.06, 'low': 1259.56, 'close':
1259.56, 'volume': 800, 'datetime': 1556030220000},
....
'close': 1264.61, 'volume': 100, 'datetime': 1556146920000}, {'open': 1265.87,
'high': 1266.0, 'low': 1265.87, 'close': 1266.0, 'volume': 232, 'datetime':
1556147220000}], 'symbol': 'GOOG', 'empty': False}
输入:
pd.DataFrame(数据)
输出:
具有 4 列的数据框(“索引”、“蜡烛”、“空”、“符号”)。 Candles 列是一本字典。我正在尝试将字典中的所有键作为列,将键值作为数据框中的行
【问题讨论】:
-
通过提供 json 内容改进您的问题。如果不知道那是什么样子,就很难为您提供帮助
-
@MichaelD 感谢您的评论。我对问题进行了您要求的更改。如果您愿意为这个问题投票,我们将不胜感激。
标签: python json dataframe nested