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

如何将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")

额外实用建议

  1. 异常处理:添加捕获逻辑应对网络错误或无效股票代码:
def get_info_on_stock(ticker):
    try:
        # 原有代码逻辑
    except Exception as e:
        print(f"获取{ticker}数据失败:{str(e)}")
  1. 空值判断:部分股票可能缺失某些数据(比如未分红的股票dividends为空),可在写入前判断,避免空工作表生成。
  2. 强制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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 11:55:23