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