第一章 Pandas数据处理核心:从零到实盘的第一步
做量化交易,说白了就是跟数据打交道。我见过太多人一上来就搞策略、跑回测,结果数据还没洗干净,最后亏得莫名其妙。嗯,咱们先把地基打牢。
Pandas 这东西,我用了快十年。从最初做股票因子研究,到后来管理私募产品,每天跟它打交道的时间比跟老婆还长。今天我就把最核心的东西拎出来,带你过一遍。
1.1 Series 与 DataFrame:两个最常用的数据结构
先搞清楚这两个东西长什么样。
Series 就是一列数据,带个索引。比如某只股票每天的收盘价:
import pandas as pd
# 创建一个 Series
close_price = pd.Series([10.5, 10.8, 10.3, 11.0],
index=['2024-01-01', '2024-01-02', '2024-01-03', '2024-01-04'])
print(close_price)
DataFrame 就是多列数据,像个 Excel 表格。每一列可以存不同类型的数据:
# 创建一个 DataFrame
df = pd.DataFrame({
'股票代码': ['000001', '000002', '000003'],
'收盘价': [10.5, 15.2, 8.9],
'成交量': [1000000, 1500000, 800000]
})
print(df)
核心区别:Series 是一维,DataFrame 是二维。你想想看,我们做量化时,一个因子就是 Series,多个因子拼起来就是 DataFrame。
我个人习惯用 df.head() 先瞄一眼数据长啥样。别一上来就全量打印,数据多了会卡死。
1.2 数据读取与写入:跟外部数据打交道
做量化,数据来源五花八门。最常见的是 CSV 和 Excel。
读取 CSV:
# 读取股票日线数据
df = pd.read_csv('stock_daily.csv', parse_dates=['date'], index_col='date')
这里有个坑——parse_dates 参数一定要用。我在项目中遇到过,有人没加这个参数,日期被当成字符串,后面做时间序列分析全乱套了。
读取 Excel:
# 读取多 sheet 的 Excel 文件
df_dict = pd.read_excel('fund_data.xlsx', sheet_name=None)
# sheet_name=None 会返回所有 sheet 的字典
写入数据:
# 保存清洗后的数据
df.to_csv('cleaned_data.csv', encoding='utf-8-sig')
# 注意 encoding 参数,不加的话 Excel 打开中文会乱码
我的小技巧:读取大文件时,用 chunksize 参数分块读取,别让内存爆了。我曾经处理过 10G 的 tick 数据,就是靠这个活下来的。
1.3 数据清洗:缺失值与重复值
真实数据从来不会干干净净。我敢说,你拿到的数据 80% 都有问题。
缺失值处理
先看看缺失值有多少:
# 检查缺失值
print(df.isnull().sum())
处理方式有三种:
- 直接删除:
df.dropna()— 适合缺失比例很小的情况 - 填充:
df.fillna(method='ffill')— 用前一个值填充,适合时间序列 - 插值:
df.interpolate()— 线性插值,适合连续数据
注意:千万别一上来就 dropna() 全删了。我曾经有个学员,把缺失值全删了,结果发现删掉了 60% 的数据,回测结果完全失真。
重复值处理
重复数据在量化里很常见,比如同一天录入了两次:
# 检查重复行
print(df.duplicated().sum())
# 删除重复行
df = df.drop_duplicates()
我个人习惯保留第一次出现的数据,因为通常那是原始数据。但也要看场景——如果是因子数据,可能取最后一次更合理。
1.4 数据筛选与排序:找到你要的那部分
数据洗干净了,接下来就是挑出你想要的。
条件筛选
# 选出收盘价大于 10 且成交量大于 100 万的股票
filtered = df[(df['收盘价'] > 10) & (df['成交量'] > 1000000)]
这里有个容易犯的错——条件要用 & 而不是 and。为什么?因为 Pandas 的 Series 比较返回的是布尔数组,and 不能处理数组。
排序
# 按收盘价降序排列
df_sorted = df.sort_values('收盘价', ascending=False)
# 多列排序:先按日期,再按股票代码
df_sorted = df.sort_values(['date', '股票代码'])
实战场景:做因子选股时,我经常先按因子值排序,然后取前 10% 的股票。这一步看似简单,但排序方向错了,选出来的股票就完全反了。
知识体系总览
下面这张图,把本章的核心逻辑串起来了:
写在最后
这一章的内容,说白了就是量化交易的「基本功」。你想想看,如果连数据都拿不对、洗不干净,后面再牛的策略也是白搭。
我个人建议,学完这一章后,找一份真实的股票数据练练手。别光看代码,动手跑一遍,遇到问题再回来翻。嗯,这样学得最扎实。
公众号:蓝海资料掘金营,微信deep3321