作为金融数据分析师,我们每天都要处理大量的市场数据。Python 的 Pandas 库是处理这类数据的利器。本文将分享一些实用的金融数据处理技巧。
为什么选择 Pandas?
Pandas 为金融数据分析提供了强大的工具:
- 时间序列处理:原生支持日期索引和时间序列操作
- 数据对齐:自动处理不同时间点的数据对齐
- 高效计算:向量化操作大幅提升性能
- 灵活的数据结构:DataFrame 天然适合表格数据
基础数据处理
读取金融数据
import pandas as pd
import numpy as np
df = pd.read_csv('stock_data.csv',
parse_dates=['date'],
index_col='date')
df.head()
df.info()
数据清洗
df = df.dropna()
# 或者用前向填充
df = df.fillna(method='ffill')
df = df.drop_duplicates()
df['volume'] = df['volume'].astype('int64')
常用技术指标计算
移动平均线
df['MA5'] = df['close'].rolling(window=5).mean()
df['MA20'] = df['close'].rolling(window=20).mean()
df['EMA12'] = df['close'].ewm(span=12, adjust=False).mean()
df['EMA26'] = df['close'].ewm(span=26, adjust=False).mean()
收益率计算
df['returns'] = df['close'].pct_change()
df['log_returns'] = np.log(df['close'] / df['close'].shift(1))
df['cumulative_returns'] = (1 + df['returns']).cumprod() - 1
波动率指标
# 历史波动率(20日)
df['volatility'] = df['returns'].rolling(window=20).std() * np.sqrt(252)
# 布林带
df['MA20'] = df['close'].rolling(window=20).mean()
df['std20'] = df['close'].rolling(window=20).std()
df['upper_band'] = df['MA20'] + (df['std20'] * 2)
df['lower_band'] = df['MA20'] - (df['std20'] * 2)
数据重采样
# 日数据转换为周数据
weekly_data = df.resample('W').agg({
'open': 'first',
'high': 'max',
'low': 'min',
'close': 'last',
'volume': 'sum'
})
# 日数据转换为月数据
monthly_data = df.resample('M').agg({
'close': 'last',
'returns': lambda x: (1 + x).prod() - 1
})
性能优化技巧
用向量化替代循环
# 慢(别这么写)
for i in range(len(df)):
df.loc[i, 'signal'] = 1 if df.loc[i, 'close'] > df.loc[i, 'MA20'] else 0
# 快
df['signal'] = np.where(df['close'] > df['MA20'], 1, 0)
用 category 节省内存
df['sector'] = df['sector'].astype('category')
实战案例:简单的交易信号
df['signal'] = 0
df.loc[df['MA5'] > df['MA20'], 'signal'] = 1
df.loc[df['MA5'] < df['MA20'], 'signal'] = -1
df['strategy_returns'] = df['signal'].shift(1) * df['returns']
df['strategy_cumulative'] = (1 + df['strategy_returns']).cumprod() - 1
sharpe_ratio = df['strategy_returns'].mean() / df['strategy_returns'].std() * np.sqrt(252)
print(f"夏普比率: {sharpe_ratio:.2f}")
总结
Pandas 是金融数据分析的强大工具,掌握以下要点:
- 数据清洗:始终检查和处理缺失值、异常值
- 向量化操作:避免循环,使用 Pandas 内置方法
- 时间序列:熟练使用
rolling()、shift()、resample()等方法 - 性能优化:合理使用数据类型,避免不必要的复制
在下一篇文章中,我将分享如何使用这些基础知识构建完整的量化交易回测系统。
参考资源