pandas_demo · 表格处理演示
内容:
Series 列vs DataFrame 表
数据清洗三连:看结构 / 筛条件 / 补缺失
时间序列三件套:日期索引 / pct_change / rolling
一张表打尽:收盘价 + 收益率 + 20日均线
导入与主入口
import pandas as pd
from quant_data import get_kline
if __name__ == "__main__":
1. Series vs DataFrame
df = get_kline()
print("\n----- DataFrame 长这样(一张表)-----")
print(df.tail(3).to_string())
s = df["close"]
print("\n----- Series 长这样(一列)-----")
print(s.tail(3))
print("\nSeries 是一列,DataFrame 是一张表;列拼起来就是表。")
比喻:Series 是一列(一竖条),DataFrame 是一张表(多列拼起来)。
2. 数据清洗三连
清洗三连 ① 看结构
print("\n===== 清洗三连 ① 看结构 =====")
print("行数 x 列数:", df.shape)
print("列名:", list(df.columns))
print("缺失值统计:\n", df.isna().sum())
清洗三连 ② 筛条件
print("\n===== 清洗三连 ② 筛条件 =====")
df["pct"] = df["close"].pct_change()
hot = df[df["pct"] > 0.03]
print(f"五年里单日涨超 3% 的日子有 {len(hot)} 天:")
print(hot.head(3).to_string())
清洗三连 ③ 补缺失
print("\n===== 清洗三连 ③ 补缺失 =====")
print("删掉空行后还剩:", len(df.dropna()), "行")
df = df.dropna()
3. 时间序列三件套
print("\n===== 时间序列三件套 =====")
df["收益率"] = df["close"].pct_change()
df["MA5"] = df["close"].rolling(5).mean()
df["MA20"] = df["close"].rolling(20).mean()
4. 一张表打尽
print("\n----- 一张表打尽 -----")
print(df.tail(5)[["close", "收益率", "MA5", "MA20"]].to_string())
print("\n看最后一行:MA20 是 20 天均值的滚动窗口,越平滑、反应越慢;")
print("MA5 更灵敏。短线上穿长线 = 金叉(买入信号),这就是下期实战的基础。")
核心要点速览
Series:一列(df["close"])
DataFrame:一张表(df)
看结构:shape / columns / isna
筛条件:df[df["pct"] > 0.03]
补缺失:df.dropna()
收益率:pct_change()
均线:rolling(5).mean()
多列选取:df[["close","MA5"]]
金句:
pct_change() 算收益率,
rolling(5).mean() 算均线 ——
pandas 把"时间序列"变成"一行代码"。
运行输出 · python .\pandas_demo.py
PS> python .\pandas_demo.py
[数据源] akshare 不可用(ProxyError),尝试 baostock...
login success!
logout success!
[数据源] baostock 获取成功,共 178 条
----- DataFrame 长这样(一张表)-----
open high low close volume
date
2026-09-22 1252.15 1265.88 1248.10 1253.80 2457294
2026-09-23 1255.03 1271.50 1250.89 1251.24 3098122
2026-09-24 1250.01 1256.13 1231.05 1237.00 3123935
----- Series 长这样(一列)-----
date
2026-09-22 1253.80
2026-09-23 1251.24
2026-09-24 1237.00
Name: close, dtype: float64
Series 是一列,DataFrame 是一张表;列拼起来就是表。
===== 清洗三连 ① 看结构 =====
行数 x 列数: (178, 5)
列名: ['open', 'high', 'low', 'close', 'volume']
缺失值统计:
open 0
high 0
low 0
close 0
volume 0
dtype: int64
===== 清洗三连 ② 筛条件 =====
五年里单日涨超 3% 的日子有 8 天:
open high low close volume pct
date
2026-01-29 1304.138805 1411.595935 1298.336120 1404.484227 18953440 0.086146
2026-02-03 1411.595935 1442.670583 1409.671475 1440.824274 8632066 0.033581
2026-02-04 1450.671255 1497.825397 1439.925542 1489.746575 10912293 0.033954
===== 清洗三连 ③ 补缺失 =====
删掉空行后还剩: 177 行
===== 时间序列三件套 =====
----- 一张表打尽 -----
close 收益率 MA5 MA20
date
2026-09-18 1257.12 -0.007782 1266.562 1291.7955
2026-09-21 1252.57 -0.003619 1261.484 1289.1910
2026-09-22 1253.80 0.000982 1257.694 1286.6810
2026-09-23 1251.24 -0.002042 1256.342 1284.1030
2026-09-24 1237.00 -0.011381 1250.346 1281.3380
看最后一行:MA20 是 20 天均值的滚动窗口,越平滑、反应越慢;
MA5 更灵敏。短线上穿长线 = 金叉(买入信号),这就是下期实战的基础
关键结论:清洗后剩 177 行;单日涨超 3% 的日子有 8 天;MA5 比 MA20 更灵敏,短线上穿长线即"金叉"。