将RESTful输出转换为数据帧的最有效方法

时间:2019-07-05 01:17:27

标签: python json pandas sdmx

我有一个我转换为JSON的REST调用的输出。

这是字典和列表的高度嵌套集合,但是我最终可以将其转换为数据框,如下所示:

import panads as pd
from requests import get 

url = 'http://stats.oecd.org/SDMX-JSON/data/MEI_FIN/IR3TIB.GBR+USA.M/all'
params = { 
        'startTime' : '2008-06',
        'dimensionAtObservation' : 'TimeDimension'
        }

r = get(url, params = params)
x = r.json()

d = x['dataSets'][0]['series']
a = pd.DataFrame(d['0:0:0']['observations'])
b = pd.DataFrame(d['0:1:0']['observations'])

这项工作没有进行一些操作即可使其更容易使用,并且由于存在多个时间序列,因此我可以为每个时间序列创建一个相同的版本,但这毋庸置疑,这有点笨拙。

是否有更好/更清洁的方法来执行此操作。

2 个答案:

答案 0 :(得分:0)

没有任何答复,这是我想出的解决方案。我添加了一个列表推导,以处理将每个系列放入一个数据帧中,然后进行转置,因为此源导致该系列跨行而不是向下对齐。

import panads as pd
from requests import get 

url = 'http://stats.oecd.org/SDMX-JSON/data/MEI_FIN/IR3TIB.GBR+USA.M/all'
params = { 
        'startTime' : '2008-06',
        'dimensionAtObservation' : 'TimeDimension'
        }

r = get(url, params = params)
x = r.json()

d = x['dataSets'][0]['series']
df = [pd.DataFrame(d[i]['observations']).loc[0] for i in d]
df = pd.DataFrame(df).T

答案 1 :(得分:0)

pandasdmx库使这个超级简单:

msg.payload = [0, 16833];
let pay = msg.payload;

const buf = Buffer.allocUnsafe(4);
buf.writeUInt16BE(pay[0],2);
buf.writeUInt16BE(pay[1],0);

msg.payload = buf.readFloatBE(0);
return msg;enter code here