将 RESTful 输出转换为数据帧的最有效方法
Most efficient way of converting RESTful output to dataframe
我已将 REST 调用的输出转换为 JSON。
这是一个高度嵌套的字典和列表集合,但我最终能够将其转换为数据框,如下所示:
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'])
这项工作没有一些操作以使其更易于使用,并且由于有多个时间序列,我可以为每个时间序列做一个相同的版本,但不用说它有点笨拙。
有没有 better/cleaner 方法来做到这一点。
没有任何回应,这是我想出的解决方案。我添加了一个列表理解来处理将每个系列放入一个数据框中,然后作为此源进行转置导致该系列跨行对齐而不是向下对齐列。
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
pandasdmx
库使这个超级简单:
import pandasdmx as sdmx
df = sdmx.Request('OECD').data(
resource_id='MEI_FIN',
key='IR3TIB.GBR+USA.M',
params={'startTime': '2008-06', 'dimensionAtObservation': 'TimeDimension'},
).write()
我已将 REST 调用的输出转换为 JSON。
这是一个高度嵌套的字典和列表集合,但我最终能够将其转换为数据框,如下所示:
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'])
这项工作没有一些操作以使其更易于使用,并且由于有多个时间序列,我可以为每个时间序列做一个相同的版本,但不用说它有点笨拙。
有没有 better/cleaner 方法来做到这一点。
没有任何回应,这是我想出的解决方案。我添加了一个列表理解来处理将每个系列放入一个数据框中,然后作为此源进行转置导致该系列跨行对齐而不是向下对齐列。
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
pandasdmx
库使这个超级简单:
import pandasdmx as sdmx
df = sdmx.Request('OECD').data(
resource_id='MEI_FIN',
key='IR3TIB.GBR+USA.M',
params={'startTime': '2008-06', 'dimensionAtObservation': 'TimeDimension'},
).write()