yfinance 数据导出 4 个实战场景:股价存 CSV、财报存 Excel
【免费下载链接】yfinanceDownload market data from Yahoo! Finance's API项目地址: https://gitcode.com/GitHub_Trending/yf/yfinance
这篇文章基于开源项目 yfinance,按 4 个真实场景演示 yfinance 数据导出的完整做法:留存股价快照、整理财务三表、批量落盘一篮子标的、修复历史价格。每个场景只给最小可运行代码,读完即可照做。若尚未安装,先在终端执行pip install yfinance。
一行代码留存股价快照
操作步骤
用股票代码创建Ticker对象,调history()方法按时间窗口取行情表,最后用 pandas 的to_csv()落盘。只涉及两个关键参数:period控制时间范围(1y表示近一年,max为全部历史),interval控制颗粒度,"1d"即日线。
最小代码
下面这段代码把 AAPL 近一年的日线数据存到当前目录的aapl_1y.csv,文件里包含日期、开盘、最高、最低、收盘、成交量等列。
import yfinance as yf aapl = yf.Ticker("AAPL") hist = aapl.history(period="1y", interval="1d") hist.to_csv("aapl_1y.csv")可能踩的坑
⚠️ 代码写错或该区间无交易时hist是空表,导出前先用len(hist)确认;to_csv后在 Excel 里打开出现乱码时,补上encoding="utf_8_sig"参数。
多 Sheet 写入财务三表 Excel
操作步骤
Ticker对象的income_stmt、balance_sheet、cash_flow三个属性直接返回年度利润表、资产负债表、现金流量表的 DataFrame,实现见 yfinance/ticker.py。用 pandas 的ExcelWriter作上下文管理器,把三张表写进同一个工作簿的三个工作表,离开with块时自动保存关闭。写入 Excel 需先装引擎:pip install openpyxl。
最小代码
下面代码取 MSFT 的年度三张财报,用reset_index()把财年索引摊平成普通列,写入msft_3stmts.xlsx的Income、Balance、CashFlow三个工作表。
import yfinance as yf import pandas as pd msft = yf.Ticker("MSFT") with pd.ExcelWriter("msft_3stmts.xlsx") as writer: msft.income_stmt.reset_index().to_excel(writer, sheet_name="Income") msft.balance_sheet.reset_index().to_excel(writer, sheet_name="Balance") msft.cash_flow.reset_index().to_excel(writer, sheet_name="CashFlow")可能踩的坑
⚠️ 三张表的列(财年)可能起止不一致,跨表对比前留意索引年份;要按季度看就换用quarterly_income_stmt这类属性。
一篮子标的批量下载落盘
操作步骤
多只标的同时处理时,用模块级的yf.download(),把多个代码用空格拼成一个字符串传入,底层由 yfinance/multi.py 统一发起请求。group_by="ticker"会让股票代码成为列的第一层,之后用df["AAPL"]就能单挑出一只标的;不传该参数时列按字段名混排。
最小代码
下面代码把 SPY、AAPL、MSFT 近三个月的日线存成一个 CSV,行是日期,列按标的分组。
import yfinance as yf df = yf.download("SPY AAPL MSFT", period="3mo", group_by="ticker") df.to_csv("basket_3mo.csv")可能踩的坑
⚠️ 某只代码写错不会中断整体下载,只会让该标的的列全是 NaN,建议落盘前用df.isna().all(axis=0)检查一下哪只缺数据。
用 repair 修复价格跳变与缺口
操作步骤
Yahoo 原始数据偶有问题:个别日期收盘价高出百倍、漏做分红或拆股调整导致价格跳变、整行缺失。history()提供repair=True开关,检测到异常后自动用更细颗粒度重建对应区间,并在结果表加一列Repaired?标出被修复的行,更多修复类型与原理见 doc/source/advanced/price_repair.rst。
最小代码
下面代码取 AAPL 五年日线并开启修复,先打印被修复的行数,再把结果存盘。
import yfinance as yf aapl = yf.Ticker("AAPL") hist = aapl.history(period="5y", repair=True) print(hist["Repaired?"].sum()) hist.to_csv("aapl_5y_repaired.csv")下图是 8TRA.DE 修复前后的对比:2023-06-02 该股票分红 0.7,但 Yahoo 未下调前一交易日的 Adj Close,价格序列出现断档,修复后该列被重新调整。
可能踩的坑
⚠️repair会按小时级粒度重抓受影响区间,只对最近几天开开关既慢又没必要,建议放在较长时间范围上一次性跑完并存盘,避免反复抓取。
下一步可以做什么
想减少重复抓取开销,可以看文档advanced/caching.rst里的缓存机制;完整 API 与更多可运行示例从 doc/source/index.rst 入手。遇到报价异常的标的,仓库tests/data/目录存放了多组坏数据与修复结果的 CSV 对照文件,编写自己的校验脚本时可以直接参考。
【免费下载链接】yfinanceDownload market data from Yahoo! Finance's API项目地址: https://gitcode.com/GitHub_Trending/yf/yfinance
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考