如何将yfinance获取的股票数据保存至CSV文件?
问题分析与修正方案
原代码核心问题
df = print(...)完全错误:print()函数返回None,导致df是NoneType,后续调用df.actions必然抛出AttributeError。- 文件名未动态填充:
"data{}.csv"里的占位符{}没传入ticker参数,无法生成对应股票的专属文件名。 - 异构数据无法直接存单一CSV:你获取的
hist、action、financials等数据结构差异极大,强行合并存CSV会导致数据混乱、结构丢失。
修正后的实现方案
推荐用Excel文件存储,将不同类型的数据存入独立工作表,既保留数据结构,又方便查看完整信息:
import yfinance as yf import pandas as pd def get_info_on_stock(ticker): # 初始化股票对象 stock = yf.Ticker(ticker) # 获取各类数据 hist = stock.history(period='max') actions = stock.actions dividends = stock.dividends financials = stock.financials qtr_financials = stock.quarterly_financials major_stake_holders = stock.major_holders institutional_holders = stock.institutional_holders # 创建Excel写入器,自动保存各类数据到不同工作表 with pd.ExcelWriter(f"{ticker}_full_data.xlsx") as writer: hist.to_excel(writer, sheet_name="历史行情") actions.to_excel(writer, sheet_name="股票行动") dividends.to_excel(writer, sheet_name="分红记录") financials.to_excel(writer, sheet_name="年度财务报表") qtr_financials.to_excel(writer, sheet_name="季度财务报表") major_stake_holders.to_excel(writer, sheet_name="主要股东") institutional_holders.to_excel(writer, sheet_name="机构股东") print(f"{ticker}的全部数据已保存到 {ticker}_full_data.xlsx") # 调用示例 get_info_on_stock("AAPL")
额外实用建议
- 异常处理:添加捕获逻辑应对网络错误或无效股票代码:
def get_info_on_stock(ticker): try: # 原有代码逻辑 except Exception as e: print(f"获取{ticker}数据失败:{str(e)}")
- 空值判断:部分股票可能缺失某些数据(比如未分红的股票
dividends为空),可在写入前判断,避免空工作表生成。 - 强制CSV存储方案(仅适合人工查看):给每个数据块添加标识分隔,牺牲结构化读取换取单文件存储:
with open(f"{ticker}_full_data.csv", "w", encoding="utf-8") as f: f.write("=== 历史行情 ===\n") hist.to_csv(f) f.write("\n=== 股票行动 ===\n") actions.to_csv(f) # 其他数据块同理追加写入
内容的提问来源于stack exchange,提问作者Mustafa Fakhar
相关产品推荐
相关产品推荐

