如何通过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
相关产品推荐
相关产品推荐

