yfinance 数据导出实战指南:四步把股价与财报变成 CSV/Excel
【免费下载链接】yfinanceDownload market data from Yahoo! Finance's API项目地址: https://gitcode.com/GitHub_Trending/yf/yfinance
周五下午四点,周报要附一份一年股价数据,你手里却只有终端里的一串数字。
yfinance 股票数据导出解决这个问题:三行代码,就能把 Yahoo Finance 的行情变成可直接发邮箱附件的 CSV 或 Excel 文件,全程只要几分钟。下面从单只股票到无人值守,四步走完常用的 yfinance 数据导出路径。
这篇文章你能带走什么
- 3 行代码拿到一年股价,存成 CSV
- 利润表、资产负债表、现金流量表合并进一个 Excel
- 多只股票一次性下载,各自导出独立文件
- 几行脚本加系统定时任务,实现无人值守导出
单只股票:把一年股价落盘
安装一行命令搞定:pip install yfinance。拿到数据靠 Ticker 对象,存盘靠 to_csv:
import yfinance as yf apple = yf.Ticker("AAPL") hist = apple.history(period="1y") # 一年日线,period 也可写 "3mo"、"5y" hist.to_csv("aapl_1y.csv")生成的 CSV 包含 Date、Open/High/Low/Close、Volume 等列,价格默认已复权;想看原始价格就给 history 传auto_adjust=False。history 的完整实现在 yfinance/ticker.py。
多张表:三张财务报表合并进一个 Excel
income_stmt 这类属性返回的都是 pandas DataFrame,用 ExcelWriter 各占一个工作表写进去即可:
import yfinance as yf import pandas as pd msft = yf.Ticker("MSFT") with pd.ExcelWriter("msft_financials.xlsx") as writer: msft.income_stmt.to_excel(writer, sheet_name="Income Statement") msft.balance_sheet.to_excel(writer, sheet_name="Balance Sheet") msft.cash_flow.to_excel(writer, sheet_name="Cash Flow")这三个属性都定义在 Ticker 类里,想要季度口径的表,把属性名前面加 quarterly_ 前缀即可。
批量:多只股票一次下载
方式一是把代码用空格拼成字符串交给 yf.download,得到一个多列索引的大表:
import yfinance as yf data = yf.download("SPY AAPL", period="1mo") data.to_csv("spy_aapl_1mo.csv")这段就是官方示例 doc/source/reference/examples/download.py 的内容。方式二适合要独立文件的场景,用 Tick
ers 逐个导出:
import yfinance as yf tickers = yf.Tickers("AAPL MSFT GOOG") for t in tickers.tickers: df = t.history(period="3mo") df.to_csv(f"{t.ticker}_3mo.csv")Tickers 的更多用法见 doc/source/reference/examples/tickers.py。
无人值守:定时自动导出
把导出逻辑写进脚本,交给系统定时任务按点执行:
# export_daily.py import datetime as dt import yfinance as yf for sym in ["AAPL", "MSFT"]: df = yf.Ticker(sym).history(period="1mo") df.to_csv(f"{sym}_{dt.date.today():%Y%m%d}.csv")# crontab -e,每个工作日 18 点执行 0 18 * * 1-5 cd ~/stock_data && python export_daily.py第二天早上打开目录,前一天的 CSV 已经躺在里面。Windows 上把 crontab 换成任务计划程序,写法同理。
避坑:三个高频问题
CSV 用 Excel 打开中文乱码。修法:hist.to_csv("数据.csv", encoding="utf_8_sig"),带 BOM 后 Excel 就能正确识别。
财务报表导出后是双行表头,列名对不齐。修法:msft.income_stmt.reset_index().to_excel("x.xlsx"),把行索引降成普通列。
某天价格突然跳 90%,或整段缩到原来的 1/100。先看是不是分红、拆股日:修复前原始价有明显缺口,复权列(Adj Close)应当连续——
另一种典型是计价单位出错,整段价格被放大或缩小 100 倍:
history 默认auto_adjust=True;若原始数据仍有异常,在 yf.download 里加repair=True自动修复,规则细节写在 doc/source/advanced/price_repair.rst。另外记住一条硬限制:分钟级数据只能取最近 60 天,长周期分析请先用日线。
现在就可以动手
把第一段的代码贴进终端跑一遍,一分钟后你手上就有一个 CSV。更多用法看官方示例目录 doc/source/reference/examples/ 和文档入口 doc/source/index.rst。
【免费下载链接】yfinanceDownload market data from Yahoo! Finance's API项目地址: https://gitcode.com/GitHub_Trending/yf/yfinance
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考