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

