我有一个THIS网址中具有以下结构的JSON网址,并试图从下面的结构中获取名称,价格和数量
{'data': {'1': {'id': 1,
'name': 'Bitcoin',
'symbol': 'BTC',
'website_slug': 'bitcoin',
'rank': 1,
'circulating_supply': 17115025.0,
'total_supply': 17115025.0,
'max_supply': 21000000.0,
'quotes': {'USD': {'price': 6317.68,
'volume_24h': 5034440000.0,
'market_cap': 108127251142.0,
'percent_change_1h': 0.22,
'percent_change_24h': 5.26,
'percent_change_7d': -4.37}},
'last_updated': 1529943576},
'2': {'id': 2,
'name': 'Litecoin',
'symbol': 'LTC',
'website_slug': 'litecoin',
'rank': 6,
'circulating_supply': 57133246.0,
'total_supply': 57133246.0,
'max_supply': 84000000.0,
'quotes': {'USD': {'price': 84.4893,
'volume_24h': 512241000.0,
'market_cap': 4827147957.0,
'percent_change_1h': 1.97,
'percent_change_24h': 8.96,
'percent_change_7d': -12.54}},
'last_updated': 1529943541}},
'metadata': {'timestamp': 1529943282,
'num_cryptocurrencies': 1586,
'error': None}}
我尝试了几种变体来连续获得每个硬币,但到目前为止都失败了
尝试1
df = pd.read_json('https://api.coinmarketcap.com/v2/ticker')
尝试2
data = requests.get('https://api.coinmarketcap.com/v2/ticker',params).json()
df = pd.DataFrame(data['data'])
df
尝试3
我在stackoverflow上发现了一个名为json normalize的函数,我尝试使用它,但到目前为止还没有运气
df = pd.io.json.json_normalize(data['data'])
df
任何关于如何将每个硬币变成一排的建议都将受到赞赏
更新1
params = {'start': 0, 'sort': 'id', 'limit': 100}
data = requests.get('https://api.coinmarketcap.com/v2/ticker', params).json()
df = pd.DataFrame(data['data'])
df = df.transpose()
df.set_index('id')
这与我想要的非常接近,但是如何从报价中获取数量和价格
答案 0 :(得分:2)
假设“报价”只有1行,键是“ USD”,我这样做了
df.drop('quotes', 1).join(
pd.DataFrame(
df.quotes.apply(
lambda x: {'USD'+'_'+key: val for key, val in x['USD'].items()}
).tolist()
)
)