news 2026/9/5 18:26:47

3 步把 yfinance 数据导出成 CSV 和 Excel:从股价到财务报表

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
3 步把 yfinance 数据导出成 CSV 和 Excel:从股价到财务报表

3 步把 yfinance 数据导出成 CSV 和 Excel:从股价到财务报表

【免费下载链接】yfinanceDownload market data from Yahoo! Finance's API项目地址: https://gitcode.com/GitHub_Trending/yf/yfinance

你从雅虎财经拉了股票数据,结果要交报告、发给同事,却卡在"这堆数据怎么存成文件"这一步。yfinance 就是干这个的:Python 库里最常被用来下载雅虎财经的股价、财务报表等市场数据,拿到的都是标准 pandas DataFrame,存成 CSV、Excel 各只要一行代码。这篇文章能直接上手的:

  • 一行命令把历史股价存成 CSV 文件
  • 把利润表、资产负债表、现金流量表写进同一个 Excel 的不同工作表
  • 批量下载多只股票,并修复导出前发现的价格跳变

快速跑通:一条命令装好,1 分钟出第一份 CSV 🚀

pip install yfinance

装完打开 Python,核心入口就是Ticker类——每只股票对应一个对象,数据都从它身上取:

import yfinance as yf apple = yf.Ticker("AAPL") hist = apple.history(period="1y") # 取近 1 年的日线 hist.to_csv("apple_stock_data.csv")

运行后当前目录会多出apple_stock_data.csv,里面是日期、开高低收、成交量、分红和拆股记录,Excel 能直接打开。Ticker类就定义在 yfinance/ticker.py,想扩展别的接口可以从这里看起。

把财务报表导出成 Excel 多工作表

做季度报告的人最熟悉这种场景:利润表、资产负债表、现金流量表分属三张表,却要塞进同一个工作簿里给财务同学对比。pandas 的ExcelWriter正好能一次写入多个工作表:

import yfinance as yf import pandas as pd msft = yf.Ticker("MSFT") with pd.ExcelWriter('msft_financial_data.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')

产出的msft_financial_data.xlsx里有三个工作表,跨表做公式和图表都不用再合并文件。income_stmtbalance_sheetcash_flow这三个属性的实现都在 yfinance/ticker.py 中,取数逻辑可以顺着源码往下看。

批量导出多只股票:用 download 一行搞定

股票不止一只的时候,别一只一只循环Ticker。顶层函数yf.download直接接收多个代码,返回一个带多级列的宽表,列按"股票代码 + 字段"组织:

import yfinance as yf data = yf.download("SPY AAPL MSFT", period="3mo") data.to_csv("watchlist_3mo.csv")

watchlist_3mo.csv里三行表头(股票、字段)对应三列一组,用 Excel 的"从表格创建透视表"或 pandas 的stack都能很快拆成扁表。想每只股票单独一个文件,就改用yf.Tickers("AAPL MSFT GOOG")再遍历,更多批量写法在 doc/source/reference/examples/ 目录里都有现成脚本。

导出前先修数据:100 倍价格错误和除息跳变 💡

数据本身有坑的时候,先导出再修等于白干。雅虎接口偶尔会把某段时间的价格整体放大 100 倍,肉眼很难发现:

对比CloseAdj Close就能发现异常区间,再用repair一键修复:

hist = yf.Ticker("AET").history(period="1y") print(hist.repair()) # 查看检测到的异常 hist = hist.repair().copy() # 原地修复后导出 hist.to_csv("aet_1d_fixed.csv")

另一种常见情况是分红日Adj Close缺失、导致价格序列在除息日断崖式下跌,同样走repair流程补齐:

检测与修复的具体算法都在 yfinance/utils.py,想确认"修复"到底改动了哪些列,读这个文件比看文档更快。

踩坑与排错

导出的 CSV 用 Excel 打开中文乱码

症状:文件名或表头带中文,双击打开全是å开头的乱码。

修复

hist.to_csv("数据.csv", encoding="utf_8_sig")

原因:Excel 默认按本地编码(Windows 下多为 GBK)读 CSV,utf_8_sig会带 BOM 头,Excel 就能自动识别成 UTF-8。

分钟级数据超过 10 年取不全

症状interval="1m"加上很长period,返回的只有一小段,或干脆报错。

修复:按 7 天以内的窗口分段下载再拼接:

chunks = [yf.Ticker("AAPL").history(start=s, end=e, interval="1m") for s, e in segments] # segments 为分段日期区间 data = pd.concat(chunks)

原因:雅虎接口对分钟级数据的单次返回窗口有上限,分段是官方文档推荐的做法。

财务报表导出后行名挤在一列不好用

症状income_stmt.to_excel(...)导出的表,指标名全堆在左上角的索引区,没法筛选排序。

修复:转置后再导出,行名就变成普通一列了:

msft.income_stmt.T.reset_index().rename( columns={'index': 'Indicator'}).to_excel("msft_income.xlsx")

原因:这些报表的行索引是指标名(如Total Revenue),索引列不进数据区,reset_index把它降级成普通列即可参与筛选。

下一步

更多导出场景——期权链、基金持仓、实时行情——都有现成脚本可抄,直接翻 doc/source/reference/examples/ 目录,每个文件都能独立运行。贡献流程写得很细,想给项目加功能可以从 CONTRIBUTING.md 看起。打开终端,把你手里那只股票的数据先跑成一份 CSV。

【免费下载链接】yfinanceDownload market data from Yahoo! Finance's API项目地址: https://gitcode.com/GitHub_Trending/yf/yfinance

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/5 18:18:44

SpringBoot3+Vue3学生管理系统全栈开发:从建表到部署

学校学生管理系统,是前后端分离练手中很典型的一个题目。用 SpringBoot3 做后端、Vue.js3 做前端、MySQL 8 做数据库,做出来的东西不是单纯的“增删改查”,而是能把登录鉴权、分页查询、接口规范、跨域代理、前后端联调、部署配置这一整条链路…

作者头像 李华
网站建设 2026/9/5 18:17:22

从流水灯到真实项目:STM32开发板进阶路线与排查思路

在不少新手群里,反复出现同一种场景:新买的STM32开发板拆封,烧录一个流水灯,拍照发动态,然后盖上盖子吃灰。我第一次玩板子时也差不多,当时觉得自己已经走进嵌入式世界,实际上只是复制了一个例程…

作者头像 李华
网站建设 2026/9/5 18:12:16

GitHub中文排行榜完全指南:发现高分优秀中文项目的终极攻略

GitHub中文排行榜完全指南:发现高分优秀中文项目的终极攻略 GitHub中文排行榜是开发者发现高分优秀中文项目的重要平台,它帮助开发者更高效地吸收国人的优秀经验成果。无论你是编程新手还是有经验的开发者,都能在这里找到适合自己的项目进行学…

作者头像 李华
网站建设 2026/9/5 18:10:46

有源电力滤波器DSOGI-PLL:从正负序分离到参数整定

有源电力滤波器专题做到下半,DSOGI-PLL的核心问题已经不是“能不能锁相”,而是“在电网不平衡、畸变和频率偏移同时出现时,锁出来的角度还能不能稳定地用于指令提取”。常规 SRF-PLL 在电压不平衡时,dq 轴上会出现二倍频振荡&…

作者头像 李华