📌 使用 Tushare / AkShare 获取A股日线行情,完成数据清洗与预处理。本讲面向实战,所有代码均可直接运行。
| 库名称 | 接口风格 | 日线获取 | 需注册? | 速率限制 | 推荐场景 |
|---|---|---|---|---|---|
| tushare | pro API (token) | daily / trade_cal | 是 (免费token) | 200次/分钟 | 量化研究、因子分析 |
| akshare | 函数式 (无需token) | stock_zh_a_hist | 否 | 较宽松 | 快速原型、教学 |
# 安装:pip install akshare pandas import akshare as ak import pandas as pd # 获取平安银行 (000001) 日线行情,2023年至今 df = ak.stock_zh_a_hist(symbol="000001", period="daily", start_date="20230101", end_date="20250301", adjust="qfq") # 前复权 # 数据清洗基础 df.columns = ["日期", "开盘", "收盘", "最高", "最低", "涨跌幅", "涨跌额", "成交量", "成交额", "振幅", "换手率"] df["日期"] = pd.to_datetime(df["日期"]) df.set_index("日期", inplace=True) df.sort_index(inplace=True) # 删除全空行 & 重复索引 df.dropna(how="all", inplace=True) df = df[~df.index.duplicated(keep='first')] # 生成收益率 (机器学习标签) df["ret_1d"] = df["收盘"].pct_change() df.dropna(subset=["ret_1d"], inplace=True) # 查看清洗后数据 print(df.head(10)) print(f"数据范围: {df.index[0].date()} ~ {df.index[-1].date()}")
# 需要先注册获取 token (免费) import tushare as ts ts.set_token('你的token') pro = ts.pro_api() df_ts = pro.daily(ts_code='000001.SZ', start_date='20230101', end_date='20250301', fields='trade_date,open,high,low,close,vol,amount') df_ts['trade_date'] = pd.to_datetime(df_ts['trade_date']) df_ts.set_index('trade_date', inplace=True) df_ts.sort_index(inplace=True) # 清洗:去空、复权可调用 pro.adj_factor 自行计算 print(df_ts.head())
| 操作 | 函数/方法 | 说明 |
|---|---|---|
| 缺失值填充 | df.ffill() | 用前一交易日数据填充 |
| 删除空行 | df.dropna() | 去除含有NaN的行 |
| 复权处理 | ak.stock_zh_a_hist(adjust='qfq') | 前复权,更符合回测 |
| 异常值过滤 | np.abs(zscore) < 3 | 标准差过滤极端值 |
| 日期索引 | pd.to_datetime() | 统一时间序列 |
📌 中小学生色系 · 温馨提醒