如何从嵌套列中提取json到数据框

时间:2019-05-19 19:06:36

标签: python json dataframe nested

我要从TD Ameritrade API中提取库存数据,并将其存储在DataFrame中。

从API中,我得到了一个嵌套的JSON对象,当我将其放入数据框中时,我得到了4列:索引,蜡烛,空,符号。但是在蜡烛里面是一本字典,我想作为数据框中的单独列(“ open”,“ close”,...)

我已经尝试过json_normalizepd.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(data)

输出:

具有4列(“索引”,“蜡烛”,“空”,“符号”)的数据框。 Candles列是一个字典。我正在尝试将字典中的所有键作为列,将键值作为数据框中的行获取

1 个答案:

答案 0 :(得分:0)

您使用的android:orientation="vertical" android:weight_sum="3" 1级太高。您想规范化/展平android:layout_weight="1"下的数据:

在发布api密钥时我也要小心。

json_normalize

输出:

data['candles']