如何将yfinance获取的季度资产负债表(company_metrics)导出至CSV?
问题分析
你遇到的核心问题是:yfinance返回的quarterly_balance_sheet本身是带日期索引的DataFrame,直接将多个这类DataFrame存入字典后,用pd.DataFrame.from_dict()无法正确解析嵌套的DataFrame结构,导致导出CSV失败。
解决方案
需要先将每个公司的资产负债表DataFrame统一结构,添加公司标识列后合并成一个完整的DataFrame,再导出CSV。修改后的代码如下:
import pandas as pd import yfinance as yf companies = ['AMZN','MSFT','META'] # 注意:FB已更名为META,建议更新代码中的标识 company_metrics = [] for company in companies: try: company_info = yf.Ticker(company) # 获取季度资产负债表并重置索引(将日期转为列) balance_sheet = company_info.quarterly_balance_sheet.reset_index() # 添加公司代码列,标记数据所属公司 balance_sheet['Company'] = company # 将处理后的DataFrame存入列表 company_metrics.append(balance_sheet) except Exception as e: print(f"获取{company}数据失败: {str(e)}") pass # 合并所有公司的DataFrame merged_df = pd.concat(company_metrics, ignore_index=True) # 导出CSV merged_df.to_csv('stocksBS92222.csv', index=False)
关键修改说明
- 替换字典为列表存储:用列表存放每个公司处理后的DataFrame,方便后续用
pd.concat()合并 - 重置索引:
reset_index()将原DataFrame的日期索引转为普通列,你可以用rename将默认的index列名改为ReportDate - 添加公司标识:新增
Company列,避免合并后无法区分数据所属公司 - 异常捕获优化:去掉空的
except,改为捕获具体异常并打印错误信息,方便排查问题 - 更新公司代码:原代码中的
FB已更名为META,同步更新可避免后续获取数据失败
内容的提问来源于stack exchange,提问作者HTMLHelpMe
相关产品推荐
相关产品推荐

