我有这段代码,可以通过其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
答案 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)
我希望它会有所帮助。谢谢。