本文为Pandas进阶修炼120题系列第三期,前两期戳
Pandas进阶修炼120题|第一期mp.weixin.qq.com
Pandas进阶修炼120题|第二期mp.weixin.qq.com
今天的内容主要为Pandas处理金融(股票)数据相关操作,包含异常值处理、数据可视化、指标计算等,我们开始吧!
51数据读取
题目:使用绝对路径读取本地Excel数据
难度:⭐
答案
data = pd.read_excel('/Users/Desktop/600000.SH.xls')
备注
请将答案中路径替换为自己机器存储数据的绝对路径,本期相关习题与该数据有关
52数据查看
题目:查看数据前三行
难度:⭐
期望结果
答案
data.head(3)
53缺失值处理
题目:查看每列数据缺失值情况
难度:⭐⭐
期望结果
代码 1
简称 2
日期 2
前收盘价(元) 2
开盘价(元) 2
最高价(元) 2
最低价(元) 2
收盘价(元) 2
成交量(股) 2
成交金额(元) 2
.................
答案
data.isnull().sum()
54缺失值处理
题目:提取日期列含有空值的行
难度:⭐⭐
期望结果
答案
data[data['日期'].isnull()]
55缺失值处理
题目:输出每列缺失值具体行数
难度:⭐⭐⭐
期望结果
列名:"代码", 第[327]行位置有缺失值
列名:"简称", 第[327, 328]行位置有缺失值
列名:"日期", 第[327, 328]行位置有缺失值
列名:"前收盘价(元)", 第[327, 328]行位置有缺失值
列名:"开盘价(元)", 第[327, 328]行位置有缺失值
列名:"最高价(元)", 第[327, 328]行位置有缺失值
列名:"最低价(元)", 第[327, 328]行位置有缺失值
列名:"收盘价(元)", 第[327, 328]行位置有缺失值
................
答案
for columname in data.columns:
if data[columname].count() != len(data):
loc = data[columname][data[columname].isnull().values==True].index.tolist()
print('列名:"{}", 第{}行位置有缺失值'.format(columname,loc))
56缺失值处理
题目:删除所有存在缺失值的行
难度:⭐⭐
答案
data.dropna(axis=0, how='any', inplace=True)
备注
axis:0-行操作(默认),1-列操作
how:any-只要有空值就删除(默认),all-全部为空值才删除
inplace:False-返回新的数据集(默认),True-在原数据集上操作
57数据可视化
题目:绘制收盘价的折线图
难度:⭐⭐
期望结果
答案
data['收盘价(元)'].plot()
58数据可视化
题目:同时绘制开盘价与收盘价
难度:⭐⭐⭐
期望结果
答案
data[['收盘价(元)','开盘价(元)']].plot()
备注
中文显示请自己设置,我的字体乱了
59数据可视化
题目:绘制涨跌幅的直方图难度:⭐⭐
期望结果
答案
data['涨跌幅(%)'].hist()
60数据可视化
题目:让直方图更细致难度:⭐⭐
期望结果
答案
data['涨跌幅(%)'].hist(bins = 30)
61数据创建
题目:以data的列名创建一个dataframe
难度:⭐⭐
答案
temp = pd.DataFrame(columns = data.columns.to_list())
62异常值处理
题目:打印所有换手率不是数字的行
难度:⭐⭐⭐
期望结果
答案
for i in range(len(data)):
if type(data.iloc[i,13]) != float:
temp = temp.append(data.loc[i])
temp
63异常值处理
题目:打印所有换手率为--的行
难度:⭐⭐⭐
答案
data[data['换手率(%)'].isin(['--'])]
备注
通过上一题我们发现换手率的异常值只有--
64数据处理
题目:重置data的行号
难度:⭐
答案
data = data.reset_index()
备注
有时我们修改数据会导致索引混乱
65异常值处理
题目:删除所有换手率为非数字的行
难度:⭐⭐⭐
答案
k =[]
for i in range(len(data)):
if type(data.iloc[i,13]) != float:
k.append(i)
data.drop(labels=k,inplace=True)
66数据可视化
题目:绘制换手率的密度曲线难度:⭐⭐⭐
期望结果
答案
data['换手率(%)'].plot(kind='kde')
67数据计算
题目:计算前一天与后一天收盘价的差值
难度:⭐⭐
答案
data['收盘价(元)'].diff()
68数据计算
题目:计算前一天与后一天收盘价变化率
难度:⭐⭐
答案
data['收盘价(元)'].pct_change()
69数据处理
题目:设置日期为索引
难度:⭐
答案
data.set_index('日期')
70指标计算
题目:以5个数据作为一个数据滑动窗口,在这个5个数据上取均值(收盘价)
难度:⭐⭐⭐
答案
data['收盘价(元)'].rolling(5).mean()
71指标计算
题目:以5个数据作为一个数据滑动窗口,计算这五个数据总和(收盘价)
难度:⭐⭐⭐
答案
data['收盘价(元)'].rolling(5).sum()
72数据可视化
题目:将收盘价5日均线、20日均线与原始数据绘制在同一个图上
难度:⭐⭐⭐
期望结果
答案
data['收盘价(元)'].plot()
data['收盘价(元)'].rolling(5).mean().plot()
data['收盘价(元)'].rolling(20).mean().plot()
73数据重采样
题目:按周为采样规则,取一周收盘价最大值
难度:⭐⭐⭐
答案
data['收盘价(元)'].resample('W').max()
74数据可视化
题目:绘制重采样数据与原始数据
难度:⭐⭐⭐
期望结果
答案
data['收盘价(元)'].plot()
data['收盘价(元)'].resample('7D').max().plot()
75数据处理
题目:将数据往后移动5天
难度:⭐⭐
答案
data.shift(5)
76数据处理
题目:将数据向前移动5天
难度:⭐⭐
答案
data.shift(-5)
77数据计算
题目:使用expending函数计算开盘价的移动窗口均值
难度:⭐⭐
答案
data['开盘价(元)'].expanding(min_periods=1).mean()
78数据可视化
题目:绘制上一题的移动均值与原始数据折线图
难度:⭐⭐⭐
期望结果
答案
data[' expanding Open mean']=data['开盘价(元)'].expanding(min_periods=1).mean()
data[['开盘价(元)', 'expanding Open mean']].plot(figsize=(16, 6))
79数据计算
题目:计算布林指标
难度:⭐⭐⭐⭐
答案
data['former 30 days rolling Close mean']=data['收盘价(元)'].rolling(20).mean()
data['upper bound']=data['former 30 days rolling Close mean']+2*data['收盘价(元)'].rolling(20).std()#在这里我们取20天内的标准差
data['lower bound']=data['former 30 days rolling Close mean']-2*data['收盘价(元)'].rolling(20).std()
80数据可视化
题目:计算布林线并绘制难度:⭐⭐⭐期望结果
答案
data[['收盘价(元)', 'former 30 days rolling Close mean','upper bound','lower bound' ]].plot(figsize=(16, 6))
以上就是Pandas进阶修炼120题第三期的全部内容,可以看到pandas处理金融数据非常方便,尤其在量化交易相关,比如计算完相关指标之后可以做一个简单的策略,感兴趣的读者可以深入研究。本期数据可以在早起python公众号后台获取,notebook源码我会在完结之后上传,如果对上面某些题目有新的解决办法或疑问欢迎点击下方小程序给我留言,下期将给出pandas+numpy结合的相关题目,欢迎关注。