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

如何基于Yahoo Finance财报提取总营收并重命名年份列?

简便实现方案

假设你已经通过yahoo_fin获取了各股票的年度利润表,且每个利润表的结构为行索引是财报项目名称、列名是年份(如2021、2020),可以通过以下几步快速实现需求:

核心代码

import pandas as pd
from yahoo_fin import stock_info as si

# 1. 批量获取各股票年度利润表
tickers = ['AAPL', 'MSFT', 'IBM']
income_statements = {ticker: si.get_income_statement(ticker, yearly=True) for ticker in tickers}

# 2. 提取totalRevenue行并整合成新数据结构
revenues_data = {ticker: stmt.loc['totalRevenue'] for ticker, stmt in income_statements.items()}
revenues_df = pd.DataFrame(revenues_data).T

# 3. 调整结构并重命名列
revenues_df = revenues_df.reset_index().rename(columns={'index': 'Ticker'})
revenues_df.columns = ['Ticker'] + [f'revenues_{col}' for col in revenues_df.columns[1:]]

# 输出结果
print(revenues_df)

步骤解析

  • 批量获取数据:用字典推导式一次性拉取多只股票的利润表,减少重复代码。
  • 精准提取目标行:通过loc['totalRevenue']直接定位营收数据行,再用字典整合多只股票的结果。
  • 快速调整结构:转置(.T)将年份从行转为列,重置索引后把股票代码转为Ticker列,匹配目标格式。
  • 批量修改列名:用列表推导式给所有年份列统一加上revenues_前缀,避免逐个修改的繁琐操作。

适配已合并的原始数据

如果你的原始数据已经是合并后的大DataFrame(比如行是股票代码,包含item列标记财报项目),可以简化为:

# 假设原始合并DataFrame为merged_df
revenues_df = merged_df[merged_df['item'] == 'totalRevenue'].drop('item', axis=1)
revenues_df.columns = ['Ticker'] + [f'revenues_{col}' for col in revenues_df.columns[1:]]

内容的提问来源于stack exchange,提问作者Economist Learning Python

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 19:27:32