Pandas进阶修炼120题|金融数据处理

2020-04-22 16:41:23 浏览数 (1)

本文为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处理金融数据非常方便,尤其在量化交易相关,比如计算完相关指标之后可以做一个简单的策略,感兴趣的读者可以深入研究。

0 人点赞