如何在Refinitiv Eikon的ek.get_data中同时获取日期与指标值?
使用Refinitiv Eikon API获取每股账面价值及对应日期的问题
问题描述
我正尝试用Refinitiv Eikon API获取历史每股账面价值(Book Value per Share),希望同时输出指标值和对应日期。目前已成功获取指标值,但输出的时间序列以整数为索引。
现有可运行代码:
import eikon as ek ek.set_app_key(my_api) ric = 'MSFT.O' params = {'SDate':'1999-12-31', 'EDate' :'2021-03-01', 'Period': 'FQ0', 'Frq':'FQ', 'reportingState':'Rsdt', 'curn':'Native', 'Scale':'3'} df = ek.get_data(ric, 'TR.BookValuePerShare', parameters=params)
尝试添加'Output': 'Date'参数后出现错误:
params = {'SDate':'1999-12-31', 'EDate' :'2021-03-01', 'Period': 'FQ0', 'Frq':'FQ', 'reportingState':'Rsdt', 'curn':'Native', 'Scale':'3', 'Output': 'Date', }
错误信息:
( 0 TR.BOOKVALUEPERSHARE 0 MSFT.O <NA>, [{'code': 405, 'col': 1, 'message': "Invalid output format: neither 'Col' nor 'Row' parameter is specified before output colums/rows.", 'row': 0}])
想了解:Row和Col参数是什么?如何同时输出指标值及对应日期?
解答
1. Row和Col参数的作用
- Row参数:定义数据按行展示的维度字段,比如将日期设为Row,每条数据行对应一个日期
- Col参数:定义数据按列展示的维度字段,比如将每股账面价值设为Col,每列对应一个指标
错误的核心原因是:使用Output参数前,必须先通过Row或Col明确数据的展示维度,否则API无法确定如何组织输出内容。
2. 两种实现同时输出指标值和日期的方法
方法一:直接指定目标字段(推荐)
不需要使用Row/Col/Output参数,直接在ek.get_data的字段列表中同时指定每股账面价值和对应的报告日期字段即可:
import eikon as ek ek.set_app_key(my_api) ric = 'MSFT.O' params = {'SDate':'1999-12-31', 'EDate' :'2021-03-01', 'Period': 'FQ0', 'Frq':'FQ', 'reportingState':'Rsdt', 'curn':'Native', 'Scale':'3'} # 同时请求指标值和报告日期字段 df, err = ek.get_data(ric, ['TR.BookValuePerShare', 'TR.BookValuePerShare.ReportDate'], parameters=params) print(df)
这种方式返回的DataFrame会包含两列:TR.BOOKVALUEPERSHARE(指标值)和TR.BOOKVALUEPERSHARE.REPORTDATE(对应日期),逻辑直观,适合大多数场景。
方法二:使用Row/Col+Output参数
如果需要按自定义维度组织数据,可以通过Row定义日期维度,Col定义指标维度,再用Output指定要输出的内容:
import eikon as ek ek.set_app_key(my_api) ric = 'MSFT.O' params = {'SDate':'1999-12-31', 'EDate' :'2021-03-01', 'Period': 'FQ0', 'Frq':'FQ', 'reportingState':'Rsdt', 'curn':'Native', 'Scale':'3', 'Row': 'TR.ReportDate', # 行维度设为报告日期 'Col': 'TR.BookValuePerShare', # 列维度设为每股账面价值 'Output': 'Date,Value' # 指定输出日期和指标值 } # 字段参数传空字符串,由params定义输出内容 df, err = ek.get_data(ric, '', parameters=params) print(df)
这种方式适合多维度数据展示的复杂场景,比如同时展示多个指标或多个标的的时间序列。
内容的提问来源于stack exchange,提问作者deblue
相关产品推荐
相关产品推荐

