【问题标题】:How do I combine multiple dataframes from a json file using an api and a for loop? (python)如何使用 api 和 for 循环组合来自 json 文件的多个数据帧? (Python)
【发布时间】:2021-09-19 08:13:31
【问题描述】:

我正在尝试下载多个公司股票代码的财务比率数据并将数据保存到一个数据框中。我使用了一个函数来与 API 交互并下载 json 文件,然后我尝试创建一个 for 循环来遍历代码字典。

api_key = 'API KEY REMOVED FOR PRIVACY'

def get_ratios(stock):
    url = (f'https://financialmodelingprep.com/api/v3/ratios/{stock}?limit=40&apikey={api_key}')
    x = pd.read_json(url)
    return x

仅使用函数 get_ratios('AAPL') 返回一个数据框,但我希望能够检索多个代码的数据,而不仅仅是 AAPL。 我试图创建一个 for 循环,以便能够检索多个代码的数据。当我尝试将函数保存到数据帧时,只保存 AAN 的数据。所以我认为它必须覆盖 AAPL 的数据。我不确定如何解决这个问题,我试图创建另一个 for 循环来将数据框 y 附加到自身,但我只是得到一个错误。

ticker = ['AAPL','AAN']
for i in ticker:
    y = get_ratios(i)

但是当我不将 get_ratios(i) 保存到列表并按如下所示运行时,我会得到一个包含 AAPL 和 AAN 数据的列表。

ticker = ['AAPL','AAN']
for i in ticker:
    print(get_ratios(i))

符号日期期间 currentRatio quickRatio cashRatio
0 苹果 2020-09-26 财年 1.363604 1.218195 0.360710
1 苹果 2019-09-28 财年 1.540126 1.384447 0.462022
2 苹果 2018-09-29 财年 1.123843 0.986566 0.221733
3 苹果 2017-09-30 财年 1.276063 1.089670 0.201252

【问题讨论】:

    标签: python json dataframe api loops


    【解决方案1】:

    在一行中使用列表理解和pd.concat,您可以:

    df = pd.concat([get_ratios(t) for t in ticker])
    

    【讨论】:

      【解决方案2】:

      get_ratios() 返回的数据帧放到一个列表中,作为最后一步,执行pd.concat 将数据帧合并为一个。例如:

      ticker = ["AAPL", "AAN"]
      
      df_list = []
      for i in ticker:
          df_list.append(get_ratios(i))
      
      df_final = pd.concat(df_list)
      

      【讨论】:

        猜你喜欢
        • 2021-10-15
        • 2018-04-26
        • 1970-01-01
        • 1970-01-01
        • 2020-03-21
        • 2014-11-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多