简体   繁体   English

如何将json转换为pandas数据框?

[英]How to convert json to pandas dataframe?

I am new at api programming.我是 api 编程的新手。 I am trying to download data from the moex api.我正在尝试从 moex api 下载数据。

Here is the code I use:这是我使用的代码:

import requests as re
from io import StringIO
import pandas as pd
import json
    
    
session = re.Session()


login = "aaaa"
password = "bbbb"

session.get('https://passport.moex.com/authenticate', auth=(login, password))    

cookies = {'MicexPassportCert': session.cookies['MicexPassportCert']}  

def api_query(engine, market, session, secur, from_start, till_end):

    param = 'https://iss.moex.com/iss/history/engines/{}/markets/{}/sessions/{}/securities/{}/candles.json?from={}&till={}&interval=24&start=0'.format(engine, market, session, secur, from_start, till_end)

    return param

url = api_query('stock', 'bonds', 'session', 'RU000A0JVWL2', '2020-11-01', '2021-05-01')

response = re.get(url, cookies=cookies)

As a result I have got the following data (part of data)结果我得到了以下数据(部分数据)

'history.cursor': {'metadata': {'INDEX': {'type': 'int64'}, 'TOTAL': {'type': 'int64'}, 'PAGESIZE': {'type': 'int64'}}, 'columns': ['INDEX', 'TOTAL', 'PAGESIZE'], 'data': [[0, 32, 100]]}}

I need to convert json format into pandas dataframe.我需要将 json 格式转换为 Pandas 数据帧。 How to do it?怎么做? As a result I should get dataframe with 1 row and 3 columns.因此,我应该得到 1 行 3 列的数据框。

Thanks in advance提前致谢

Assuming your json is properly encoded you could try something like this:假设您的 json 已正确编码,您可以尝试以下操作:

import pandas as pd
import numpy as np

json = {
    'history.cursor': {
      'metadata': {'INDEX': {'type': 'int64'}, 'TOTAL': {'type': 'int64'}, 'PAGESIZE': {'type': 'int64'}}, 
      'columns': ['INDEX', 'TOTAL', 'PAGESIZE'], 
      'data': [[0, 32, 100]]
    }
}

columns = json['history.cursor']['columns']
data = np.array(json['history.cursor']['data'])
metadata = json['history.cursor']['metadata']
d = {}

for i, column in enumerate(columns):
    d[column] = data[:,i].astype(metadata[column]['type'])


df = pd.DataFrame(d)
print(df)

you should use the method pd.io.json.read_json() method你应该使用pd.io.json.read_json() 方法

your orientation would likely be 'split'你的方向很可能是“分裂”

so pd.read_json(json,orient='split') where split is your json in the form of dict like {index -> [index], columns -> [columns], data -> [values]}所以pd.read_json(json,orient='split')其中 split 是你的 json 形式的 dict 像{index -> [index], columns -> [columns], data -> [values]}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM