0

我安装了 python fred,使用pip install fred,从 FRED / ALFRED API 获取实时数据。

我现在的任务是将评估realtime_date日期与数据相匹配——以便提取与小于或等于我所说的评估日期 ( )的最大值相关的值aDate

数据本身在包含列表的 python 字典中返回,每个观察值与一些元数据一起存储在字典中 - 每个观察值字典包含:参考日期 ( date)、请求覆盖的实时时间段 ( realtime_end, realtime_start)和值 ( value)。

当存在完全匹配时,我可以看到如何将数据与评估日期匹配,但在现实世界中,这些都是例外。我正在寻求帮助将其推广到不等式。

(注意下面我使用了一个变量fredKey——而您必须提供自己的 FRED API 密钥才能访问 FRED)。

import fred
fred.key(fredKey)
CPIobvs = fred.observations('CPIAUCSL', realtime_start = "1990-01-01")
aDate == "2008-02-15"

for i in range(1, len(CPIobvs['observations']['observation'])):
    if CPIobvs['observations']['observation'][i]['realtime_start'] == aDate:
        print (CPIobvs['observations']['observation'][i]['date'], 
                CPIobvs['observations']['observation'][i]['value']
               )

对于这个例子,我选择了一个年度基准修订日期,以确保得到一些回报。在实践中,我通常会在记录发生的日期更新模拟——在这种情况下,我的方法什么也不返回。

解决方案似乎是匹配realtime_start小于或等于评估日期(例如 )的最大日期(值aDate == "2008-02-14")。我如何匹配realtime_date小于或等于的最大值aDate

谢谢

4

1 回答 1

3

CPIobvs['observations']['observation']一种方法是通过过滤掉where 中的所有项目来识别候选人'realtime_start' > aDate

我会这样做作为一个生成器表达式

candidates = (ob for ob in CPIobvs['observations']['observation'] if
    ob['realtime_start'] <= aDate)

如果您想查看详细信息,可以在解释器中形成列表理解

[ob for ob in CPIobvs['observations']['observation'] if
    ob['realtime_start'] <= aDate]

一旦确定了这些候选,然后使用内置max()函数,为 提供一个 lambda key,它使用 的值对候选s'realtime_start'进行排序:dict

last_ob = max(candidates, key=lambda ob: ob['realtime_start'])

您需要的详细信息现在位于last_ob['date']和中last_ob['value']

于 2013-02-24T05:12:01.540 回答