多股票代码财务数据存入DataFrame的优化实现问询
解决多Ticker财务数据获取的DataFrame格式化与代码简化方案
方案一:修复循环生成的DataFrame格式问题
问题根源是直接拼接嵌套结构的原始数据时,未正确展平或拆分字段。可通过以下步骤处理:
- 对每个ticker的财务数据,先将原始返回的嵌套结构展平为标准DataFrame
- 添加
ticker列标识所属公司 - 用
pd.concat按行合并所有ticker的同类型报表数据
示例代码:
import pandas as pd import yfinance as yfs tickers = ['AMZN','AAPL','MSFT','DIS','GOOG'] # 处理资产负债表 balance_sheets = [] for ticker in tickers: # 转置后日期为行索引,指标为列,添加ticker标识 bs = yfs.get_balance_sheet(ticker).T bs['ticker'] = ticker balance_sheets.append(bs) final_bs = pd.concat(balance_sheets, axis=0) # 处理利润表 income_statements = [] for ticker in tickers: is_ = yfs.get_income_statement(ticker).T is_['ticker'] = ticker income_statements.append(is_) final_is = pd.concat(income_statements, axis=0) # 处理现金流量表 cash_flows = [] for ticker in tickers: cf = yfs.get_cash_flow(ticker).T cf['ticker'] = ticker cash_flows.append(cf) final_cf = pd.concat(cash_flows, axis=0)
说明:yfinance默认返回的报表以指标为行、日期为列,转置后可将日期设为行索引,每个指标独立成列,再通过ticker列区分不同公司,合并后不会出现数据挤在单个单元格的情况。
方案二:用循环大幅简化冗余代码
将三类报表的获取逻辑封装为通用流程,通过双层循环遍历ticker和报表类型,一次性生成所有合规的报表DataFrame:
示例代码:
import pandas as pd import yfinance as yfs tickers = ['AMZN','AAPL','MSFT','DIS','GOOG'] # 映射报表类型与对应获取函数 report_mapping = { 'balance_sheet': yfs.get_balance_sheet, 'income_statement': yfs.get_income_statement, 'cash_flow': yfs.get_cash_flow } all_reports = {} # 双层循环处理所有报表与ticker for report_name, get_func in report_mapping.items(): temp_list = [] for ticker in tickers: df = get_func(ticker).T df['ticker'] = ticker temp_list.append(df) all_reports[report_name] = pd.concat(temp_list, axis=0) # 引用示例 final_bs = all_reports['balance_sheet'] final_is = all_reports['income_statement'] final_cf = all_reports['cash_flow']
说明:通过字典统一管理报表类型和对应函数,避免重复编写三次几乎相同的代码,同时保证输出的DataFrame格式规范,可直接引用。
内容的提问来源于stack exchange,提问作者momo
相关产品推荐
相关产品推荐

