我有这段代码,它通过他们的 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
我为你创建了一个假场景:
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)
我希望它有帮助。谢谢。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句