You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过for循环调用股票API构建多公司数据的Pandas DataFrame

调整后实现代码

# 导入依赖库
import pandas as pd
import json
from urllib.request import urlopen

# 公共配置项
FMP_API = "<api_key_here>"
data_source = "balance-sheet-statement"
target_tickers = ["AAPL", "FB", "GOOG", "AMZN"]

# 接口数据解析函数
def get_jsonparsed_data(url):
    response = urlopen(url)
    data = response.read().decode("utf-8")
    return json.loads(data)

# 单只股票债务权益比计算函数
def calc_debt_equity(ticker):
    # 拉取财报数据
    req_url = f"https://financialmodelingprep.com/api/v3/{data_source}/{ticker}?limit=120&apikey={FMP_API}"
    raw_data = get_jsonparsed_data(req_url)
    df = pd.json_normalize(raw_data)
    # 计算指标
    df[ticker] = (df['totalLiabilities'] / df['totalStockholdersEquity']).round(2)
    # 处理日期索引
    df['date'] = pd.to_datetime(df['date'])
    return df[['date', ticker]].set_index('date')

# 批量拉取合并
df_buffer = []
for ticker in target_tickers:
    single_stock_df = calc_debt_equity(ticker)
    df_buffer.append(single_stock_df)

# 按日期索引对齐合并所有股票数据
result_df = pd.concat(df_buffer, axis=1)

# 查看输出
print(result_df.head())
print("-"*30)
print(result_df.dtypes)

核心逻辑说明

  • 将单只股票的拉取、计算逻辑封装为独立函数,每次调用返回对应股票的「日期为索引、股票代码为列名」的单列DataFrame
  • 用列表存储所有单只股票的计算结果,避免循环中覆盖旧数据
  • 最后通过pd.concat按列合并所有数据,pandas会自动按日期索引对齐不同股票的报告期数据,缺失值会自动填充为NaN

如果需要统一对齐到自然年度,可在合并后增加重采样逻辑:

# 取每年最后一个报告期的数据作为年度值
result_df = result_df.resample('Y').last()

内容的提问来源于stack exchange,提问作者Portfedh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.13 22:42:02