有没有一种方法可以遍历python中的函数?

时间:2020-05-21 03:30:13

标签: python api

我有这段代码,可以通过其API从美联储提取数据。我试图弄清楚如何具有可以插入功能然后输出到数据表的不同FRED ID。因此,例如,我将输入“ CPIAUCSL”,然后给我一个值列表,然后脚本将输入“ A191RL1Q225SBEA”,然后将这些值附加到数据表的底部(这样CPIAUCSL的值将在它上面)。我尝试使用下面的脚本执行此操作,但它只会覆盖以前的值。有什么想法吗?

import pandas as pd  
from requests import request  
import json  
from requests import request  
from urllib.request import urlopen  
from pandas import ExcelWriter  

def fred_variables(fred_id_list):  
    main_url= "https://api.stlouisfed.org/fred/series/observations?series_id="  
    API= "&api_key=50ebfb4929a3fe603e3b369d51826822"  
    file= "&file_type=json"  
    descending= "&sort_order=desc"  
    max_return= "&limit=21"  
    final_URL= main_url + fred_id_list + API + file + descending + max_return
    page = urlopen(final_URL)  
    data1= page.read()  
    nested_json = json.loads(data1)  
    json_file = pd.DataFrame.from_dict(pd.json_normalize(nested_json, record_path="observations"))  
    df= json_file  
    df['fredID'] = str(fred_id_list)  
    df2 = df.drop(df.columns[[0, 1]], axis=1)  
    return df2  

    fred_id_list=["CPIAUCSL","A191RL1Q225SBEA"]  
    for x in fred_id_list:  
        print(x)  

fred_variables(x)  
```[enter image description here][1]


  [1]: https://i.stack.imgur.com/8Tglt.png

1 个答案:

答案 0 :(得分:0)

我为您创建了一个假的场景:

data = {
    'CPIAUCSL': [12, 23, 1, 43, 12, 53, 13, 53, 1, 53, 123, 534],
    'A191RL1Q225SBEA': [65, 87, 23, 7, 23, 765, 23]
}

def fred_variables(fred_id):
    # processing code
    fake_result = data[fred_id]
    return fake_result

请考虑该功能就是您的功能。我假设您返回项目列表。您可以在用例中使用Python的map函数。喜欢:

fred_id_list = ["CPIAUCSL","A191RL1Q225SBEA"]
result = list(map(fred_variables, fred_id_list))
print(result)

它将生成以下输出:

[[12, 23, 1, 43, 12, 53, 13, 53, 1, 53, 123, 534], [65, 87, 23, 7, 23, 765, 23]]

如果您将全部数据合并到一个列表中,则可以执行以下操作:

final_result = []
for res in result:
    final_result.extend(res)

print(final_result)

最终输出如下:

[12, 23, 1, 43, 12, 53, 13, 53, 1, 53, 123, 534, 65, 87, 23, 7, 23, 765, 23]

针对您的具体情况

现在问您的问题,您正在从函数中返回Pandas DataFrame。因此,您需要做什么:

fred_id_list = ["CPIAUCSL","A191RL1Q225SBEA"]
result = list(map(fred_variables, fred_id_list))

此处result将是DataFrame的列表。您可以借助Pandas的concat函数来组合所有这些DataFrame。

final_result = pd.concat(result)

我希望它会有所帮助。谢谢。