0

我对 python 很陌生,所以这可能是一个愚蠢的简单问题。我已经使用他们的 API 从 EDGAR-Online 导入了财务报表,并将其作为字典导入。我已经阅读了所有我能在字典上找到的内容,并理解了键:值关系。但是,数据采用以下格式:

"{'result': {'totalrows': 4, 'rows': [{'rownum': 1, 'values': [{'field': 'basicepsnetincome', 'value': 0.77}, {'field' : 'costofrevenue', 'value': 432592000.0}, {'field': 'dilutedepsnetincome', 'value': 0.76}, {'field': 'ebit', 'value': 28455000.0}, {'field': '毛利润','价值':186708000.0},{'field':'incomebeforeextraordinaryitems','value':22622000.0},{'field':'incomebeforetaxes','value':31356000.0},{'field':'incometaxes' ,“价值”:8734000.0},{“字段”:“净收入”,“价值”:22622000.0},...”

“字段”和“值”是我对字典的有限理解的键,但这意味着它们是同一个键的重复项。无论如何,我试图弄清楚如何从上述数据中提取值,例如值为“28455000.0”的“ebit”。我认为它应该是 {'ebit' : 28455000.0} 然后'ebit' 是引用 28455000.0 的键。任何有关如何从上述数据集中提取数据点(例如 ebit)的帮助,这些数据点可以引用到变量然后随后用于计算,我们将不胜感激。

使用 requests.get

代码:

import pandas as pd 
import requests

IS = requests.get(https://datafied.api.edgar-online.com/v1/corefinancials? 
primarysymbols=MSFT&appkey={APPKEY}).json()

打印(是)

返回上面列出的数据。

EDGAR API 文档的可能有用链接 - https://developer.edgar-online.com/docs/v1#nav8

4

1 回答 1

0

从这个站点返回的 json 有一个奇怪的结构,但稍加努力你就可以得到它:

import json
from jsonpath_ng import jsonpath, parse
IS = """[your json snippet above, converted into valid json]"""
target = json.loads(IS)

fields = []
values = []
jsonpath_expr = parse('result[*].rows[*].values')
for match in jsonpath_expr.find(target):
    for i in match.value:
        for index, element in enumerate(i.values()):
            if index % 2 == 0:
                fields.append(element)
            else:
                values.append(element)
for f, v in zip(fields,values):
    print(f,' - ', v)

输出:

basicepsnetincome  -  0.77
costofrevenue  -  432592000.0
dilutedepsnetincome  -  0.76
ebit  -  28455000.0
grossprofit  -  186708000.0
incomebeforeextraordinaryitems  -  22622000.0
incomebeforetaxes  -  31356000.0
incometaxes  -  8734000.0
netincome  -  22622000.0
于 2020-05-25T22:52:05.710 回答