3. 获取股票历史数据
任务目标
使用 yfinance 下载某只股票(以贵州茅台 600519.SS 为例)近5年的日线行情数据,保存为 CSV 文件,并验证文件内容完整可读。
环境依赖
需要 yfinance 库,安装命令:
pip install yfinance pandas
完整代码
import yfinance as yf
import pandas as pd
from datetime import datetime, timedelta
# 参数配置
ticker = "600519.SS" # 贵州茅台(上交所)
years = 5
end_date = datetime.now().strftime("%Y-%m-%d")
start_date = (datetime.now() - timedelta(days=years*365)).strftime("%Y-%m-%d")
output_file = "600519_5y_daily.csv"
# 下载日线数据
df = yf.download(ticker, start=start_date, end=end_date, interval="1d", auto_adjust=True)
# 数据清洗:展平多级列(若存在)
if isinstance(df.columns, pd.MultiIndex):
df.columns = df.columns.get_level_values(0)
# 重置索引,将日期变为普通列
df = df.reset_index()
# 统一列名(英文→中文,便于阅读)
df.columns = ["日期", "开盘", "最高", "最低", "收盘", "成交量"]
# 保存为 CSV(UTF-8 with BOM,便于 Excel 直接打开)
df.to_csv(output_file, index=False, encoding="utf-8-sig")
# 验证输出
print(f"数据已保存至: {output_file}")
print(f"总行数: {len(df)}")
print(f"日期范围: {df['日期'].min()} 至 {df['日期'].max()}")
print("\n前5行预览:")
print(df.head())
运行方式
python download_stock_data.py
验证方法与通过条件
- 文件生成:当前目录出现
600519_5y_daily.csv,文件大小应大于 100KB(约1200+行数据)。 - 数据完整性:程序输出的总行数应大于 1200(5年约 1250 个交易日),日期范围覆盖最近5年。
- 内容抽查:用 Excel 或文本编辑器打开 CSV,确认包含表头
日期,开盘,最高,最低,收盘,成交量,且日期列无空值、收盘价均为正数。 - 可复现性:再次运行程序,CSV 文件会被覆盖更新,日期范围自动滚动至当前日期。
常见问题
- 网络错误:yfinance 需要联网访问 Yahoo Finance,若失败请检查网络或稍后重试。
- 股票代码格式:上交所股票代码后缀为
.SS(如 600519.SS),深交所为.SZ(如 000001.SZ)。 - 数据缺失:若某天停牌,该日不会出现在数据中,属正常现象。