Pandas进阶修炼120题-第三期(金融数据处理,51-80题)

这篇具有很好参考价值的文章主要介绍了Pandas进阶修炼120题-第三期(金融数据处理,51-80题)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


自己再写一遍的pandas习题,相比于标准答案添加了自己的理解与注释,也可直接下载链接上的习题(原版带答案)
链接:https://pan.baidu.com/s/1arrqcBFZKqJngzRzUB2QfA?pwd=29eb
提取码:29eb
–来自百度网盘超级会员V3的分享

往期内容:

  • 第一期:Pandas基础(1-20题)

  • 第二期:Pandas数据处理(21-50题)

  • 第三期:Pandas金融数据处理(51-80题)

  • 第四期:当Pandas遇上NumPy(81-100题)

  • 第五期:一些补充(101-120题)

第三期 金融数据处理

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

51.使用绝对路径读取本地Excel数据

方法一:双反斜杠绝对路径
data = pd.read_excel('pandas120_51_80.xlsx')
data = pd.read_excel('C:\\Users\\XXX\\Desktop\\DataAnalyse\\组内出数任务\\data1\\pandas120\\pandas120_51_80.xlsx')
方法二:r’ ’
![请添加图片描述](https://img-blog.csdnimg.cn/4972169546374a668c2d253927c331b1.png)
data = pd.read_excel(r'C:\Users\XXX\Desktop\DataAnalyse\组内出数任务\data1\pandas120\pandas120_51_80.xlsx')
拓展:关于正斜杠(’ / ‘)和反斜杠(’ \ ')

关于正斜杠(’ / ‘)和反斜杠(’ \ '):

在文件路径中使用正斜杠(’ / ‘)还是反斜杠(’ \ ')取决于所使用的操作系统。这里有一个简短的概述:

  1. 正斜杠(’ / ‘):这是Unix和类Unix系统(如Linux和macOS)的标准。例如,Unix系统中的路径可能看起来像’ /home/user/documents/file.txt '。

  2. 反斜杠(’ \ '):这是Windows的标准。例如,Windows系统中的路径可能看起来像“C:\Users\Username\Documents\file.txt”。

然而,有几件事要记住:

  • 在许多编程语言中,反斜杠(’ \ ‘)是一个转义字符,这意味着它用于引入特殊字符序列。例如,’ \n ‘是换行符,’ \t ‘是制表符。因此,如果您在Python或Java等语言的路径中使用反斜杠,则需要转义它们(’ \ ')或使用原始字符串字面量(例如,在Python中,‘r ’ c:\path\to\file’ ')。

  • 现代版本的Windows在某种程度上是宽容的,并且会接受正斜杠,尽管这有时会导致意想不到的行为,如果一个程序不期望它。通常最好使用您的操作系统的标准格式。

  • 处理url或uri时,无论您的操作系统如何,始终使用正斜杠。这是网址的标准格式。

  • 如果你正在编写一个程序,需要在不同的操作系统之间移植,考虑使用一个函数或库,以一种平台独立的方式处理文件路径。例如,在Python中,你可以使用’ os.path.join() '来构造路径,它将使用当前操作系统的正确分隔符。

# 示例
import os

# This will use the correct separator for the current OS
path = os.path.join('home', 'user', 'documents', 'file.txt')
path
'home\\user\\documents\\file.txt'

52.查看数据前三行

data.head(3)
代码 简称 日期 前收盘价(元) 开盘价(元) 最高价(元) 最低价(元) 收盘价(元) 成交量(股) 成交金额(元) 涨跌(元) 涨跌幅(%) 均价(元) 换手率(%) A股流通市值(元) 总市值(元) A股流通股本(股) 市盈率
0 600000.SH 浦发银行 2016-01-04 16.1356 16.1444 16.1444 15.4997 15.7205 42240610 754425783 -0.4151 -2.5725 17.8602 0.2264 3.320318e+11 3.320318e+11 1.865347e+10 6.5614
1 600000.SH 浦发银行 2016-01-05 15.7205 15.4644 15.9501 15.3672 15.8618 58054793 1034181474 0.1413 0.8989 17.8139 0.3112 3.350163e+11 3.350163e+11 1.865347e+10 6.6204
2 600000.SH 浦发银行 2016-01-06 15.8618 15.8088 16.0208 15.6234 15.9855 46772653 838667398 0.1236 0.7795 17.9307 0.2507 3.376278e+11 3.376278e+11 1.865347e+10 6.6720

53.查看每列数据缺失值情况

使用df.isnull().any()只能判断每列有无空值,如果想要输出空值的数量,需要使用df.isnull().sum()

sum():此方法在df.isnull()的结果上调用。由于True等于1,False等于0,因此求和操作将计算每列中True值(即null或NaN值)的数量。

因此,总而言之,df.isnull().sum()是一个方便的一行代码,它将返回DataFrame df的每列中缺失或NaN值的数量。

data.isnull().any()
代码           True
简称           True
日期           True
前收盘价(元)      True
开盘价(元)       True
最高价(元)       True
最低价(元)       True
收盘价(元)       True
成交量(股)       True
成交金额(元)      True
涨跌(元)        True
涨跌幅(%)       True
均价(元)        True
换手率(%)       True
A股流通市值(元)    True
总市值(元)       True
A股流通股本(股)    True
市盈率          True
dtype: bool
data.isnull().sum()
代码           1
简称           2
日期           2
前收盘价(元)      2
开盘价(元)       2
最高价(元)       2
最低价(元)       2
收盘价(元)       2
成交量(股)       2
成交金额(元)      2
涨跌(元)        2
涨跌幅(%)       2
均价(元)        2
换手率(%)       2
A股流通市值(元)    2
总市值(元)       2
A股流通股本(股)    2
市盈率          2
dtype: int64

54.提取日期列含有空值的行

data[data['日期'].isnull()]
代码 简称 日期 前收盘价(元) 开盘价(元) 最高价(元) 最低价(元) 收盘价(元) 成交量(股) 成交金额(元) 涨跌(元) 涨跌幅(%) 均价(元) 换手率(%) A股流通市值(元) 总市值(元) A股流通股本(股) 市盈率
327 NaN NaN NaT NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
328 数据来源:Wind资讯 NaN NaT NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN

55.输出每列缺失值具体行数

方法一:根据列名遍历,直接打印空缺值的行
for name in data.columns:
    print('{}列,空缺值的行为{}'.format(name,data[data[name].isnull()].index.tolist()))
代码列,空缺值的行为[327]
简称列,空缺值的行为[327, 328]
日期列,空缺值的行为[327, 328]
前收盘价(元)列,空缺值的行为[327, 328]
开盘价(元)列,空缺值的行为[327, 328]
最高价(元)列,空缺值的行为[327, 328]
最低价(元)列,空缺值的行为[327, 328]
收盘价(元)列,空缺值的行为[327, 328]
成交量(股)列,空缺值的行为[327, 328]
成交金额(元)列,空缺值的行为[327, 328]
涨跌(元)列,空缺值的行为[327, 328]
涨跌幅(%)列,空缺值的行为[327, 328]
均价(元)列,空缺值的行为[327, 328]
换手率(%)列,空缺值的行为[327, 328]
A股流通市值(元)列,空缺值的行为[327, 328]
总市值(元)列,空缺值的行为[327, 328]
A股流通股本(股)列,空缺值的行为[327, 328]
市盈率列,空缺值的行为[327, 328]
方法二:标准答案

相比自己写的方法在遍历时多了一步对于该列有无空缺值的判断,代码写的比较清晰

for name in data.columns:
    if data[name].isnull().any():
        location = data[data[name].isnull() == True].index.to_list()
    print('列名:"{}", 第{}行位置有缺失值'.format(name, location))
列名:"代码", 第[327]行位置有缺失值
列名:"简称", 第[327, 328]行位置有缺失值
列名:"日期", 第[327, 328]行位置有缺失值
列名:"前收盘价(元)", 第[327, 328]行位置有缺失值
列名:"开盘价(元)", 第[327, 328]行位置有缺失值
列名:"最高价(元)", 第[327, 328]行位置有缺失值
列名:"最低价(元)", 第[327, 328]行位置有缺失值
列名:"收盘价(元)", 第[327, 328]行位置有缺失值
列名:"成交量(股)", 第[327, 328]行位置有缺失值
列名:"成交金额(元)", 第[327, 328]行位置有缺失值
列名:"涨跌(元)", 第[327, 328]行位置有缺失值
列名:"涨跌幅(%)", 第[327, 328]行位置有缺失值
列名:"均价(元)", 第[327, 328]行位置有缺失值
列名:"换手率(%)", 第[327, 328]行位置有缺失值
列名:"A股流通市值(元)", 第[327, 328]行位置有缺失值
列名:"总市值(元)", 第[327, 328]行位置有缺失值
列名:"A股流通股本(股)", 第[327, 328]行位置有缺失值
列名:"市盈率", 第[327, 328]行位置有缺失值

56.删除所有存在缺失值的行

"""
备注
axis:0-行操作(默认),1-列操作
how:any-只要有空值就删除(默认),all-全部为空值才删除
inplace:False-返回新的数据集(默认),True-在原数据集上操作
"""
data.dropna(axis = 0,how = 'any',inplace = True)

57.绘制收盘价的折线图

方法一:直接使用.plot绘制
data['收盘价(元)'].plot(kind = 'line')

Pandas进阶修炼120题-第三期(金融数据处理,51-80题),pandas,金融

文章来源地址https://www.toymoban.com/news/detail-617862.html

# 等价于
plt.plot(data['收盘价(元)'])

Pandas进阶修炼120题-第三期(金融数据处理,51-80题),pandas,金融

58.同时绘制开盘价与收盘价

data[['开盘价(元)','收盘价(元)']].plot()

Pandas进阶修炼120题-第三期(金融数据处理,51-80题),pandas,金融

59.绘制涨跌幅的直方图

data['涨跌幅(%)'].plot(kind = 'hist')

Pandas进阶修炼120题-第三期(金融数据处理,51-80题),pandas,金融

60.让直方图更细致

# import matplotlib.pyplot as plt # 如果之前运行过就不要再执行,可能会重置设置导致汉字不显示

n, bins, patches = plt.hist(data['涨跌幅(%)'],bins = 30,edgecolor = 'black')

'''
print(n) # [  1.   0.   0.   0.   0.   0.   0.   0.   1.   0.   4.   3.   4.  10. 18.  42. 109.  73.  31.  12.  10.   3.   1.   1.   1.   1.   0.   0.0.   2.]
print(bins) # [-8.0217     -7.54621667 -7.07073333 -6.59525    -6.11976667 -5.64428333
            #  -5.1688     -4.69331667 -4.21783333 -3.74235    -3.26686667 -2.79138333
            #  -2.3159     -1.84041667 -1.36493333 -0.88945    -0.41396667  0.06151667
            #   0.537       1.01248333  1.48796667  1.96345     2.43893333  2.91441667
            #   3.3899      3.86538333  4.34086667  4.81635     5.29183333  5.76731667
            #   6.2428    ]
print(patches) # <BarContainer object of 30 artists>
'''

# Add labels to each bin
for i in range(len(patches)):
    plt.text(
        patches[i].get_x()+patches[i].get_width()/2.,
        patches[i].get_height(),
        f'{n[i]:.0f}',
        ha = 'center'
    )
plt.title('Frequency Distribution of 涨跌幅 Levels')
plt.xlabel('涨跌幅')
plt.ylabel('Frequency')
plt.show()

Pandas进阶修炼120题-第三期(金融数据处理,51-80题),pandas,金融

61.以data的列名创建一个DataFrame

temp = pd.DataFrame(columns = data.columns)
temp
代码 简称 日期 前收盘价(元) 开盘价(元) 最高价(元) 最低价(元) 收盘价(元) 成交量(股) 成交金额(元) 涨跌(元) 涨跌幅(%) 均价(元) 换手率(%) A股流通市值(元) 总市值(元) A股流通股本(股) 市盈率

62.打印所有换手率不是数字的行

for i in range(len(data)):
    if type(data.loc[i,'换手率(%)'])!=float:
        temp = temp.append(data.loc[i])

temp
代码 简称 日期 前收盘价(元) 开盘价(元) 最高价(元) 最低价(元) 收盘价(元) 成交量(股) 成交金额(元) 涨跌(元) 涨跌幅(%) 均价(元) 换手率(%) A股流通市值(元) 总市值(元) A股流通股本(股) 市盈率
26 600000.SH 浦发银行 2016-02-16 00:00:00 16.2946 16.2946 16.2946 16.2946 16.2946 -- -- 0.0 0.0 -- -- 344156547606.75 344156547606.75 18653471415.0 6.801
27 600000.SH 浦发银行 2016-02-17 00:00:00 16.2946 16.2946 16.2946 16.2946 16.2946 -- -- 0.0 0.0 -- -- 344156547606.75 344156547606.75 18653471415.0 6.801
28 600000.SH 浦发银行 2016-02-18 00:00:00 16.2946 16.2946 16.2946 16.2946 16.2946 -- -- 0.0 0.0 -- -- 344156547606.75 344156547606.75 18653471415.0 6.801
29 600000.SH 浦发银行 2016-02-19 00:00:00 16.2946 16.2946 16.2946 16.2946 16.2946 -- -- 0.0 0.0 -- -- 344156547606.75 344156547606.75 18653471415.0 6.801
30 600000.SH 浦发银行 2016-02-22 00:00:00 16.2946 16.2946 16.2946 16.2946 16.2946 -- -- 0.0 0.0 -- -- 344156547606.75 344156547606.75 18653471415.0 6.801
31 600000.SH 浦发银行 2016-02-23 00:00:00 16.2946 16.2946 16.2946 16.2946 16.2946 -- -- 0.0 0.0 -- -- 344156547606.75 344156547606.75 18653471415.0 6.801
32 600000.SH 浦发银行 2016-02-24 00:00:00 16.2946 16.2946 16.2946 16.2946 16.2946 -- -- 0.0 0.0 -- -- 344156547606.75 344156547606.75 18653471415.0 6.801
33 600000.SH 浦发银行 2016-02-25 00:00:00 16.2946 16.2946 16.2946 16.2946 16.2946 -- -- 0.0 0.0 -- -- 344156547606.75 344156547606.75 18653471415.0 6.801
34 600000.SH 浦发银行 2016-02-26 00:00:00 16.2946 16.2946 16.2946 16.2946 16.2946 -- -- 0.0 0.0 -- -- 344156547606.75 344156547606.75 18653471415.0 6.801
35 600000.SH 浦发银行 2016-02-29 00:00:00 16.2946 16.2946 16.2946 16.2946 16.2946 -- -- 0.0 0.0 -- -- 344156547606.75 344156547606.75 18653471415.0 6.801
36 600000.SH 浦发银行 2016-03-01 00:00:00 16.2946 16.2946 16.2946 16.2946 16.2946 -- -- 0.0 0.0 -- -- 344156547606.75 344156547606.75 18653471415.0 6.801
37 600000.SH 浦发银行 2016-03-02 00:00:00 16.2946 16.2946 16.2946 16.2946 16.2946 -- -- 0.0 0.0 -- -- 344156547606.75 344156547606.75 18653471415.0 6.801
38 600000.SH 浦发银行 2016-03-03 00:00:00 16.2946 16.2946 16.2946 16.2946 16.2946 -- -- 0.0 0.0 -- -- 344156547606.75 344156547606.75 18653471415.0 6.801
39 600000.SH 浦发银行 2016-03-04 00:00:00 16.2946 16.2946 16.2946 16.2946 16.2946 -- -- 0.0 0.0 -- -- 344156547606.75 344156547606.75 18653471415.0 6.801
40 600000.SH 浦发银行 2016-03-07 00:00:00 16.2946 16.2946 16.2946 16.2946 16.2946 -- -- 0.0 0.0 -- -- 344156547606.75 344156547606.75 18653471415.0 6.801
41 600000.SH 浦发银行 2016-03-08 00:00:00 16.2946 16.2946 16.2946 16.2946 16.2946 -- -- 0.0 0.0 -- -- 344156547606.75 344156547606.75 18653471415.0 6.801
42 600000.SH 浦发银行 2016-03-09 00:00:00 16.2946 16.2946 16.2946 16.2946 16.2946 -- -- 0.0 0.0 -- -- 344156547606.75 344156547606.75 18653471415.0 6.801
43 600000.SH 浦发银行 2016-03-10 00:00:00 16.2946 16.2946 16.2946 16.2946 16.2946 -- -- 0.0 0.0 -- -- 344156547606.75 344156547606.75 18653471415.0 6.801
data.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 327 entries, 0 to 326
Data columns (total 18 columns):
 #   Column     Non-Null Count  Dtype         
---  ------     --------------  -----         
 0   代码         327 non-null    object        
 1   简称         327 non-null    object        
 2   日期         327 non-null    datetime64[ns]
 3   前收盘价(元)    327 non-null    float64       
 4   开盘价(元)     327 non-null    float64       
 5   最高价(元)     327 non-null    float64       
 6   最低价(元)     327 non-null    float64       
 7   收盘价(元)     327 non-null    float64       
 8   成交量(股)     327 non-null    object        
 9   成交金额(元)    327 non-null    object        
 10  涨跌(元)      327 non-null    float64       
 11  涨跌幅(%)     327 non-null    float64       
 12  均价(元)      327 non-null    object        
 13  换手率(%)     327 non-null    object        
 14  A股流通市值(元)  327 non-null    float64       
 15  总市值(元)     327 non-null    float64       
 16  A股流通股本(股)  327 non-null    float64       
 17  市盈率        327 non-null    float64       
dtypes: datetime64[ns](1), float64(11), object(6)
memory usage: 56.6+ KB

63.打印所有换手率为–的行

方法一:逐一判断保存
for i in range(len(data)):
    if data.loc[i,'换手率(%)']=="--":
        temp = temp.append(data.loc[i])

temp
代码 简称 日期 前收盘价(元) 开盘价(元) 最高价(元) 最低价(元) 收盘价(元) 成交量(股) 成交金额(元) 涨跌(元) 涨跌幅(%) 均价(元) 换手率(%) A股流通市值(元) 总市值(元) A股流通股本(股) 市盈率
26 600000.SH 浦发银行 2016-02-16 00:00:00 16.2946 16.2946 16.2946 16.2946 16.2946 -- -- 0.0 0.0 -- -- 344156547606.75 344156547606.75 18653471415.0 6.801
27 600000.SH 浦发银行 2016-02-17 00:00:00 16.2946 16.2946 16.2946 16.2946 16.2946 -- -- 0.0 0.0 -- -- 344156547606.75 344156547606.75 18653471415.0 6.801
28 600000.SH 浦发银行 2016-02-18 00:00:00 16.2946 16.2946 16.2946 16.2946 16.2946 -- -- 0.0 0.0 -- -- 344156547606.75 344156547606.75 18653471415.0 6.801
29 600000.SH 浦发银行 2016-02-19 00:00:00 16.2946 16.2946 16.2946 16.2946 16.2946 -- -- 0.0 0.0 -- -- 344156547606.75 344156547606.75 18653471415.0 6.801
30 600000.SH 浦发银行 2016-02-22 00:00:00 16.2946 16.2946 16.2946 16.2946 16.2946 -- -- 0.0 0.0 -- -- 344156547606.75 344156547606.75 18653471415.0 6.801
31 600000.SH 浦发银行 2016-02-23 00:00:00 16.2946 16.2946 16.2946 16.2946 16.2946 -- -- 0.0 0.0 -- -- 344156547606.75 344156547606.75 18653471415.0 6.801
32 600000.SH 浦发银行 2016-02-24 00:00:00 16.2946 16.2946 16.2946 16.2946 16.2946 -- -- 0.0 0.0 -- -- 344156547606.75 344156547606.75 18653471415.0 6.801
33 600000.SH 浦发银行 2016-02-25 00:00:00 16.2946 16.2946 16.2946 16.2946 16.2946 -- -- 0.0 0.0 -- -- 344156547606.75 344156547606.75 18653471415.0 6.801
34 600000.SH 浦发银行 2016-02-26 00:00:00 16.2946 16.2946 16.2946 16.2946 16.2946 -- -- 0.0 0.0 -- -- 344156547606.75 344156547606.75 18653471415.0 6.801
35 600000.SH 浦发银行 2016-02-29 00:00:00 16.2946 16.2946 16.2946 16.2946 16.2946 -- -- 0.0 0.0 -- -- 344156547606.75 344156547606.75 18653471415.0 6.801
36 600000.SH 浦发银行 2016-03-01 00:00:00 16.2946 16.2946 16.2946 16.2946 16.2946 -- -- 0.0 0.0 -- -- 344156547606.75 344156547606.75 18653471415.0 6.801
37 600000.SH 浦发银行 2016-03-02 00:00:00 16.2946 16.2946 16.2946 16.2946 16.2946 -- -- 0.0 0.0 -- -- 344156547606.75 344156547606.75 18653471415.0 6.801
38 600000.SH 浦发银行 2016-03-03 00:00:00 16.2946 16.2946 16.2946 16.2946 16.2946 -- -- 0.0 0.0 -- -- 344156547606.75 344156547606.75 18653471415.0 6.801
39 600000.SH 浦发银行 2016-03-04 00:00:00 16.2946 16.2946 16.2946 16.2946 16.2946 -- -- 0.0 0.0 -- -- 344156547606.75 344156547606.75 18653471415.0 6.801
40 600000.SH 浦发银行 2016-03-07 00:00:00 16.2946 16.2946 16.2946 16.2946 16.2946 -- -- 0.0 0.0 -- -- 344156547606.75 344156547606.75 18653471415.0 6.801
41 600000.SH 浦发银行 2016-03-08 00:00:00 16.2946 16.2946 16.2946 16.2946 16.2946 -- -- 0.0 0.0 -- -- 344156547606.75 344156547606.75 18653471415.0 6.801
42 600000.SH 浦发银行 2016-03-09 00:00:00 16.2946 16.2946 16.2946 16.2946 16.2946 -- -- 0.0 0.0 -- -- 344156547606.75 344156547606.75 18653471415.0 6.801
43 600000.SH 浦发银行 2016-03-10 00:00:00 16.2946 16.2946 16.2946 16.2946 16.2946 -- -- 0.0 0.0 -- -- 344156547606.75 344156547606.75 18653471415.0 6.801
26 600000.SH 浦发银行 2016-02-16 00:00:00 16.2946 16.2946 16.2946 16.2946 16.2946 -- -- 0.0 0.0 -- -- 344156547606.75 344156547606.75 18653471415.0 6.801
27 600000.SH 浦发银行 2016-02-17 00:00:00 16.2946 16.2946 16.2946 16.2946 16.2946 -- -- 0.0 0.0 -- -- 344156547606.75 344156547606.75 18653471415.0 6.801
28 600000.SH 浦发银行 2016-02-18 00:00:00 16.2946 16.2946 16.2946 16.2946 16.2946 -- -- 0.0 0.0 -- -- 344156547606.75 344156547606.75 18653471415.0 6.801
29 600000.SH 浦发银行 2016-02-19 00:00:00 16.2946 16.2946 16.2946 16.2946 16.2946 -- -- 0.0 0.0 -- -- 344156547606.75 344156547606.75 18653471415.0 6.801
30 600000.SH 浦发银行 2016-02-22 00:00:00 16.2946 16.2946 16.2946 16.2946 16.2946 -- -- 0.0 0.0 -- -- 344156547606.75 344156547606.75 18653471415.0 6.801
31 600000.SH 浦发银行 2016-02-23 00:00:00 16.2946 16.2946 16.2946 16.2946 16.2946 -- -- 0.0 0.0 -- -- 344156547606.75 344156547606.75 18653471415.0 6.801
32 600000.SH 浦发银行 2016-02-24 00:00:00 16.2946 16.2946 16.2946 16.2946 16.2946 -- -- 0.0 0.0 -- -- 344156547606.75 344156547606.75 18653471415.0 6.801
33 600000.SH 浦发银行 2016-02-25 00:00:00 16.2946 16.2946 16.2946 16.2946 16.2946 -- -- 0.0 0.0 -- -- 344156547606.75 344156547606.75 18653471415.0 6.801
34 600000.SH 浦发银行 2016-02-26 00:00:00 16.2946 16.2946 16.2946 16.2946 16.2946 -- -- 0.0 0.0 -- -- 344156547606.75 344156547606.75 18653471415.0 6.801
35 600000.SH 浦发银行 2016-02-29 00:00:00 16.2946 16.2946 16.2946 16.2946 16.2946 -- -- 0.0 0.0 -- -- 344156547606.75 344156547606.75 18653471415.0 6.801
36 600000.SH 浦发银行 2016-03-01 00:00:00 16.2946 16.2946 16.2946 16.2946 16.2946 -- -- 0.0 0.0 -- -- 344156547606.75 344156547606.75 18653471415.0 6.801
37 600000.SH 浦发银行 2016-03-02 00:00:00 16.2946 16.2946 16.2946 16.2946 16.2946 -- -- 0.0 0.0 -- -- 344156547606.75 344156547606.75 18653471415.0 6.801
38 600000.SH 浦发银行 2016-03-03 00:00:00 16.2946 16.2946 16.2946 16.2946 16.2946 -- -- 0.0 0.0 -- -- 344156547606.75 344156547606.75 18653471415.0 6.801
39 600000.SH 浦发银行 2016-03-04 00:00:00 16.2946 16.2946 16.2946 16.2946 16.2946 -- -- 0.0 0.0 -- -- 344156547606.75 344156547606.75 18653471415.0 6.801
40 600000.SH 浦发银行 2016-03-07 00:00:00 16.2946 16.2946 16.2946 16.2946 16.2946 -- -- 0.0 0.0 -- -- 344156547606.75 344156547606.75 18653471415.0 6.801
41 600000.SH 浦发银行 2016-03-08 00:00:00 16.2946 16.2946 16.2946 16.2946 16.2946 -- -- 0.0 0.0 -- -- 344156547606.75 344156547606.75 18653471415.0 6.801
42 600000.SH 浦发银行 2016-03-09 00:00:00 16.2946 16.2946 16.2946 16.2946 16.2946 -- -- 0.0 0.0 -- -- 344156547606.75 344156547606.75 18653471415.0 6.801
43 600000.SH 浦发银行 2016-03-10 00:00:00 16.2946 16.2946 16.2946 16.2946 16.2946 -- -- 0.0 0.0 -- -- 344156547606.75 344156547606.75 18653471415.0 6.801
方法二:根据 isin() 判断是否具有包含关系
data[data['换手率(%)'].isin(["--"])] # 注意传入的值是列表类型的数据
代码 简称 日期 前收盘价(元) 开盘价(元) 最高价(元) 最低价(元) 收盘价(元) 成交量(股) 成交金额(元) 涨跌(元) 涨跌幅(%) 均价(元) 换手率(%) A股流通市值(元) 总市值(元) A股流通股本(股) 市盈率
26 600000.SH 浦发银行 2016-02-16 16.2946 16.2946 16.2946 16.2946 16.2946 -- -- 0.0 0.0 -- -- 3.441565e+11 3.441565e+11 1.865347e+10 6.801
27 600000.SH 浦发银行 2016-02-17 16.2946 16.2946 16.2946 16.2946 16.2946 -- -- 0.0 0.0 -- -- 3.441565e+11 3.441565e+11 1.865347e+10 6.801
28 600000.SH 浦发银行 2016-02-18 16.2946 16.2946 16.2946 16.2946 16.2946 -- -- 0.0 0.0 -- -- 3.441565e+11 3.441565e+11 1.865347e+10 6.801
29 600000.SH 浦发银行 2016-02-19 16.2946 16.2946 16.2946 16.2946 16.2946 -- -- 0.0 0.0 -- -- 3.441565e+11 3.441565e+11 1.865347e+10 6.801
30 600000.SH 浦发银行 2016-02-22 16.2946 16.2946 16.2946 16.2946 16.2946 -- -- 0.0 0.0 -- -- 3.441565e+11 3.441565e+11 1.865347e+10 6.801
31 600000.SH 浦发银行 2016-02-23 16.2946 16.2946 16.2946 16.2946 16.2946 -- -- 0.0 0.0 -- -- 3.441565e+11 3.441565e+11 1.865347e+10 6.801
32 600000.SH 浦发银行 2016-02-24 16.2946 16.2946 16.2946 16.2946 16.2946 -- -- 0.0 0.0 -- -- 3.441565e+11 3.441565e+11 1.865347e+10 6.801
33 600000.SH 浦发银行 2016-02-25 16.2946 16.2946 16.2946 16.2946 16.2946 -- -- 0.0 0.0 -- -- 3.441565e+11 3.441565e+11 1.865347e+10 6.801
34 600000.SH 浦发银行 2016-02-26 16.2946 16.2946 16.2946 16.2946 16.2946 -- -- 0.0 0.0 -- -- 3.441565e+11 3.441565e+11 1.865347e+10 6.801
35 600000.SH 浦发银行 2016-02-29 16.2946 16.2946 16.2946 16.2946 16.2946 -- -- 0.0 0.0 -- -- 3.441565e+11 3.441565e+11 1.865347e+10 6.801
36 600000.SH 浦发银行 2016-03-01 16.2946 16.2946 16.2946 16.2946 16.2946 -- -- 0.0 0.0 -- -- 3.441565e+11 3.441565e+11 1.865347e+10 6.801
37 600000.SH 浦发银行 2016-03-02 16.2946 16.2946 16.2946 16.2946 16.2946 -- -- 0.0 0.0 -- -- 3.441565e+11 3.441565e+11 1.865347e+10 6.801
38 600000.SH 浦发银行 2016-03-03 16.2946 16.2946 16.2946 16.2946 16.2946 -- -- 0.0 0.0 -- -- 3.441565e+11 3.441565e+11 1.865347e+10 6.801
39 600000.SH 浦发银行 2016-03-04 16.2946 16.2946 16.2946 16.2946 16.2946 -- -- 0.0 0.0 -- -- 3.441565e+11 3.441565e+11 1.865347e+10 6.801
40 600000.SH 浦发银行 2016-03-07 16.2946 16.2946 16.2946 16.2946 16.2946 -- -- 0.0 0.0 -- -- 3.441565e+11 3.441565e+11 1.865347e+10 6.801
41 600000.SH 浦发银行 2016-03-08 16.2946 16.2946 16.2946 16.2946 16.2946 -- -- 0.0 0.0 -- -- 3.441565e+11 3.441565e+11 1.865347e+10 6.801
42 600000.SH 浦发银行 2016-03-09 16.2946 16.2946 16.2946 16.2946 16.2946 -- -- 0.0 0.0 -- -- 3.441565e+11 3.441565e+11 1.865347e+10 6.801
43 600000.SH 浦发银行 2016-03-10 16.2946 16.2946 16.2946 16.2946 16.2946 -- -- 0.0 0.0 -- -- 3.441565e+11 3.441565e+11 1.865347e+10 6.801

64.重置data的行号

data.reset_index(drop = True)
data.head()
代码 简称 日期 前收盘价(元) 开盘价(元) 最高价(元) 最低价(元) 收盘价(元) 成交量(股) 成交金额(元) 涨跌(元) 涨跌幅(%) 均价(元) 换手率(%) A股流通市值(元) 总市值(元) A股流通股本(股) 市盈率
0 600000.SH 浦发银行 2016-01-04 16.1356 16.1444 16.1444 15.4997 15.7205 42240610 754425783 -0.4151 -2.5725 17.8602 0.2264 3.320318e+11 3.320318e+11 1.865347e+10 6.5614
1 600000.SH 浦发银行 2016-01-05 15.7205 15.4644 15.9501 15.3672 15.8618 58054793 1034181474 0.1413 0.8989 17.8139 0.3112 3.350163e+11 3.350163e+11 1.865347e+10 6.6204
2 600000.SH 浦发银行 2016-01-06 15.8618 15.8088 16.0208 15.6234 15.9855 46772653 838667398 0.1236 0.7795 17.9307 0.2507 3.376278e+11 3.376278e+11 1.865347e+10 6.6720
3 600000.SH 浦发银行 2016-01-07 15.9855 15.7205 15.8088 15.3672 15.4644 11350479 199502702 -0.5211 -3.2597 17.5766 0.0608 3.266223e+11 3.266223e+11 1.865347e+10 6.4545
4 600000.SH 浦发银行 2016-01-08 15.4644 15.6675 15.7912 14.9345 15.4467 71918296 1262105060 -0.0177 -0.1142 17.5492 0.3855 3.262492e+11 3.262492e+11 1.865347e+10 6.4471
data.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 327 entries, 0 to 326
Data columns (total 18 columns):
 #   Column     Non-Null Count  Dtype         
---  ------     --------------  -----         
 0   代码         327 non-null    object        
 1   简称         327 non-null    object        
 2   日期         327 non-null    datetime64[ns]
 3   前收盘价(元)    327 non-null    float64       
 4   开盘价(元)     327 non-null    float64       
 5   最高价(元)     327 non-null    float64       
 6   最低价(元)     327 non-null    float64       
 7   收盘价(元)     327 non-null    float64       
 8   成交量(股)     327 non-null    object        
 9   成交金额(元)    327 non-null    object        
 10  涨跌(元)      327 non-null    float64       
 11  涨跌幅(%)     327 non-null    float64       
 12  均价(元)      327 non-null    object        
 13  换手率(%)     327 non-null    object        
 14  A股流通市值(元)  327 non-null    float64       
 15  总市值(元)     327 non-null    float64       
 16  A股流通股本(股)  327 non-null    float64       
 17  市盈率        327 non-null    float64       
dtypes: datetime64[ns](1), float64(11), object(6)
memory usage: 56.6+ KB

65.删除所有换手率为非数字的行

k = []
for i in range(len(data)):
    if type(data.loc[i,'换手率(%)']) != float:
       k.append(i)
data = data.drop(k)
data.head()
代码 简称 日期 前收盘价(元) 开盘价(元) 最高价(元) 最低价(元) 收盘价(元) 成交量(股) 成交金额(元) 涨跌(元) 涨跌幅(%) 均价(元) 换手率(%) A股流通市值(元) 总市值(元) A股流通股本(股) 市盈率
0 600000.SH 浦发银行 2016-01-04 16.1356 16.1444 16.1444 15.4997 15.7205 42240610 754425783 -0.4151 -2.5725 17.8602 0.2264 3.320318e+11 3.320318e+11 1.865347e+10 6.5614
1 600000.SH 浦发银行 2016-01-05 15.7205 15.4644 15.9501 15.3672 15.8618 58054793 1034181474 0.1413 0.8989 17.8139 0.3112 3.350163e+11 3.350163e+11 1.865347e+10 6.6204
2 600000.SH 浦发银行 2016-01-06 15.8618 15.8088 16.0208 15.6234 15.9855 46772653 838667398 0.1236 0.7795 17.9307 0.2507 3.376278e+11 3.376278e+11 1.865347e+10 6.6720
3 600000.SH 浦发银行 2016-01-07 15.9855 15.7205 15.8088 15.3672 15.4644 11350479 199502702 -0.5211 -3.2597 17.5766 0.0608 3.266223e+11 3.266223e+11 1.865347e+10 6.4545
4 600000.SH 浦发银行 2016-01-08 15.4644 15.6675 15.7912 14.9345 15.4467 71918296 1262105060 -0.0177 -0.1142 17.5492 0.3855 3.262492e+11 3.262492e+11 1.865347e+10 6.4471

66.绘制换手率的密度曲线

data['换手率(%)'].plot(kind = 'kde')

Pandas进阶修炼120题-第三期(金融数据处理,51-80题),pandas,金融

67.计算前一天与后一天收盘价的差值

方法一:基于业务上的理解,直接使用收盘价-前一天的收盘价
data['收盘价(元)'] - data['前收盘价(元)']
0     -0.4151
1      0.1413
2      0.1237
3     -0.5211
4     -0.0177
        ...  
322   -0.0800
323   -0.1000
324   -0.0600
325   -0.0600
326   -0.1000
Length: 309, dtype: float64
方法二:直接使用.diff() 计算

diff() :计算Series中的元素与同一个Series中另一个元素的差值(默认为上一行中的元素)。

# 计算Series中的元素与Series中另一个元素的差值(默认为上一行中的元素)。

data['收盘价(元)'].diff()
0         NaN
1      0.1413
2      0.1237
3     -0.5211
4     -0.0177
        ...  
322   -0.0800
323   -0.1000
324   -0.0600
325   -0.0600
326   -0.1000
Name: 收盘价(元), Length: 309, dtype: float64

68.计算前一天与后一天收盘价变化率

方法一:根据业务知识计算变化率
(data['收盘价(元)'] - data['前收盘价(元)']) / data['前收盘价(元)']
0     -0.025726
1      0.008988
2      0.007799
3     -0.032598
4     -0.001145
         ...   
322   -0.005277
323   -0.006631
324   -0.004005
325   -0.004021
326   -0.006729
Length: 309, dtype: float64
方法二:直接使用pct_change() 计算

pct_change():这是对pandas Series对象的方法调用。

pct_change()方法计算当前元素与系列中前一个元素之间的变化百分比。默认情况下,它计算紧跟前一个元素的变化百分比(lag=1)。这通常用于时间序列分析,以创建从一个时期到下一个时期的一系列百分比变化。

data['收盘价(元)'].pct_change()
0           NaN
1      0.008988
2      0.007799
3     -0.032598
4     -0.001145
         ...   
322   -0.005277
323   -0.006631
324   -0.004005
325   -0.004021
326   -0.006729
Name: 收盘价(元), Length: 309, dtype: float64

69.设置日期为索引

data = data.set_index('日期')
data
代码 简称 前收盘价(元) 开盘价(元) 最高价(元) 最低价(元) 收盘价(元) 成交量(股) 成交金额(元) 涨跌(元) 涨跌幅(%) 均价(元) 换手率(%) A股流通市值(元) 总市值(元) A股流通股本(股) 市盈率
日期
2016-01-04 600000.SH 浦发银行 16.1356 16.1444 16.1444 15.4997 15.7205 42240610 754425783 -0.4151 -2.5725 17.8602 0.2264 3.320318e+11 3.320318e+11 1.865347e+10 6.5614
2016-01-05 600000.SH 浦发银行 15.7205 15.4644 15.9501 15.3672 15.8618 58054793 1034181474 0.1413 0.8989 17.8139 0.3112 3.350163e+11 3.350163e+11 1.865347e+10 6.6204
2016-01-06 600000.SH 浦发银行 15.8618 15.8088 16.0208 15.6234 15.9855 46772653 838667398 0.1236 0.7795 17.9307 0.2507 3.376278e+11 3.376278e+11 1.865347e+10 6.6720
2016-01-07 600000.SH 浦发银行 15.9855 15.7205 15.8088 15.3672 15.4644 11350479 199502702 -0.5211 -3.2597 17.5766 0.0608 3.266223e+11 3.266223e+11 1.865347e+10 6.4545
2016-01-08 600000.SH 浦发银行 15.4644 15.6675 15.7912 14.9345 15.4467 71918296 1262105060 -0.0177 -0.1142 17.5492 0.3855 3.262492e+11 3.262492e+11 1.865347e+10 6.4471
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
2017-05-03 600000.SH 浦发银行 15.1600 15.1600 15.1600 15.0500 15.0800 14247943 215130847 -0.0800 -0.5277 15.0991 0.0659 3.260037e+11 3.260037e+11 2.161828e+10 6.1395
2017-05-04 600000.SH 浦发银行 15.0800 15.0700 15.0700 14.9000 14.9800 19477788 291839737 -0.1000 -0.6631 14.9832 0.0901 3.238418e+11 3.238418e+11 2.161828e+10 6.0988
2017-05-05 600000.SH 浦发银行 14.9800 14.9500 14.9800 14.5200 14.9200 40194577 592160198 -0.0600 -0.4005 14.7323 0.1859 3.225447e+11 3.225447e+11 2.161828e+10 6.0744
2017-05-08 600000.SH 浦发银行 14.9200 14.7800 14.9000 14.5100 14.8600 43568576 638781010 -0.0600 -0.4021 14.6615 0.2015 3.212476e+11 3.212476e+11 2.161828e+10 6.0500
2017-05-09 600000.SH 浦发银行 14.8600 14.6900 14.8400 14.6600 14.7600 19225492 283864640 -0.1000 -0.6729 14.765 0.0889 3.190858e+11 3.190858e+11 2.161828e+10 6.0093

309 rows × 17 columns

70.以5个数据作为一个数据滑动窗口,在这个5个数据上取均值(收盘价)

.rolling(window=5):这将创建数据的滚动视图,窗口大小为5。这意味着对于数据中的每个点,它考虑当前点和之前的四个点。

.mean():计算每个滚动窗口的平均值。

结果将是一个pandas series,其中每个点是当天和前四个交易日的平均收盘价。请注意,结果中的前四个点将是NaN(表示“Not a Number”),因为它们在滚动窗口中只有不到5个点。

data['收盘价(元)'].rolling(window = 5).mean()
日期
2016-01-04         NaN
2016-01-05         NaN
2016-01-06         NaN
2016-01-07         NaN
2016-01-08    15.69578
                ...   
2017-05-03    15.14200
2017-05-04    15.12800
2017-05-05    15.07000
2017-05-08    15.00000
2017-05-09    14.92000
Name: 收盘价(元), Length: 309, dtype: float64

71.以5个数据作为一个数据滑动窗口,计算这五个数据总和(收盘价)

data['收盘价(元)'].rolling(window = 5).sum()
日期
2016-01-04        NaN
2016-01-05        NaN
2016-01-06        NaN
2016-01-07        NaN
2016-01-08    78.4789
               ...   
2017-05-03    75.7100
2017-05-04    75.6400
2017-05-05    75.3500
2017-05-08    75.0000
2017-05-09    74.6000
Name: 收盘价(元), Length: 309, dtype: float64

72.将收盘价5日均线、20日均线与原始数据绘制在同一个图上

data['收盘价(元)'].rolling(window = 5).mean().plot()
data['收盘价(元)'].rolling(window = 5).mean().plot()
data['收盘价(元)'].plot()

Pandas进阶修炼120题-第三期(金融数据处理,51-80题),pandas,金融

73.按周为采样规则,取一周收盘价最大值

方法一:使用滑动窗口以7天为采样

这种方法从实际效果上看,确实可以取到每个滑动窗口的最大值,由于滑动窗口的步长为1,所以不具有业务意义

data['收盘价(元)'].rolling(window = 7).max()
日期
2016-01-04      NaN
2016-01-05      NaN
2016-01-06      NaN
2016-01-07      NaN
2016-01-08      NaN
              ...  
2017-05-03    15.21
2017-05-04    15.21
2017-05-05    15.21
2017-05-08    15.21
2017-05-09    15.21
Name: 收盘价(元), Length: 309, dtype: float64
方法二(正解):按周重采样

.resample(‘W’):按周重新采样数据。“W”代表“周”。此操作按周对数据进行分组。

.max():计算每周组的最大值。

结果,是一个pandas Series,其中每个点是相应周的最大收盘价。注意,您需要确保DataFrame的索引是DatetimeIndex,否则重新示例操作将无法工作。如果DataFrame的索引不是DatetimeIndex,则可以使用pd.to_datetime()函数对其进行转换。

week_max = data['收盘价(元)'].resample('W').max()
week_max
日期
2016-01-10    15.9855
2016-01-17    15.8265
2016-01-24    15.6940
2016-01-31    15.0405
2016-02-07    16.2328
               ...   
2017-04-16    15.9700
2017-04-23    15.5600
2017-04-30    15.2100
2017-05-07    15.1600
2017-05-14    14.8600
Freq: W-SUN, Name: 收盘价(元), Length: 71, dtype: float64

值得注意的是,与方法一滑动窗口采样不同,如果一个采样周内无数据,还是可能出现空值。

去除空值的方法是使用函数 dropna()

week_max[week_max.isnull()]
日期
2016-02-14   NaN
2016-02-28   NaN
2016-03-06   NaN
2016-10-09   NaN
Name: 收盘价(元), dtype: float64
data['收盘价(元)'].resample('W').max().dropna()
日期
2016-01-10    15.9855
2016-01-17    15.8265
2016-01-24    15.6940
2016-01-31    15.0405
2016-02-07    16.2328
               ...   
2017-04-16    15.9700
2017-04-23    15.5600
2017-04-30    15.2100
2017-05-07    15.1600
2017-05-14    14.8600
Name: 收盘价(元), Length: 67, dtype: float64
rolling() 和 ressample() 的区别与联系

pandas中的 rolling() 函数和 ressample() 函数的用途略有不同,尽管它们都可以用于在时间窗口内聚合数据。

  • ’ rolling() '用于在一定大小的滚动窗口上应用函数。例如,7天窗口的滚动平均值将计算数据中每7天周期的平均值。但是,这将包括跨周(如周三至周二)的7天周期。

  • ’ resample() '用于将时间序列的频率更改为定义的频率,然后在每个间隔上应用函数。例如,重新采样到“W”频率并取最大值将计算数据中每个星期的最大值。

您可以使用’ rolling() '来计算7天的最大值,如果您的数据从周一开始并且没有间隔,则可能类似于每周最大值。但是,如果数据中存在空白,或者不是从周一开始,则7天最大值将不对应于周最大值。

74.绘制重采样数据与原始数据

data['收盘价(元)'].plot()
data['收盘价(元)'].resample('7D').max().plot()

Pandas进阶修炼120题-第三期(金融数据处理,51-80题),pandas,金融

75.将数据往后移动5天

data.shift(5)
代码 简称 前收盘价(元) 开盘价(元) 最高价(元) 最低价(元) 收盘价(元) 成交量(股) 成交金额(元) 涨跌(元) 涨跌幅(%) 均价(元) 换手率(%) A股流通市值(元) 总市值(元) A股流通股本(股) 市盈率
日期
2016-01-04 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2016-01-05 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2016-01-06 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2016-01-07 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2016-01-08 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
2017-05-03 600000.SH 浦发银行 15.00 15.02 15.10 14.99 15.05 12975919 195296862 0.05 0.3333 15.0507 0.06 3.253551e+11 3.253551e+11 2.161828e+10 6.1273
2017-05-04 600000.SH 浦发银行 15.05 15.06 15.11 15.00 15.05 14939871 225022668 0.00 0.0000 15.0619 0.0691 3.253551e+11 3.253551e+11 2.161828e+10 6.1273
2017-05-05 600000.SH 浦发银行 15.05 15.05 15.25 15.03 15.21 22887645 345791526 0.16 1.0631 15.1082 0.1059 3.288140e+11 3.288140e+11 2.161828e+10 6.1925
2017-05-08 600000.SH 浦发银行 15.21 15.15 15.22 15.08 15.21 15718509 238419161 0.00 0.0000 15.1681 0.0727 3.288140e+11 3.288140e+11 2.161828e+10 6.1925
2017-05-09 600000.SH 浦发银行 15.21 15.21 15.22 15.13 15.16 12607509 191225527 -0.05 -0.3287 15.1676 0.0583 3.277331e+11 3.277331e+11 2.161828e+10 6.1721

309 rows × 17 columns

76.将数据向前移动5天

data.shift(-5)
代码 简称 前收盘价(元) 开盘价(元) 最高价(元) 最低价(元) 收盘价(元) 成交量(股) 成交金额(元) 涨跌(元) 涨跌幅(%) 均价(元) 换手率(%) A股流通市值(元) 总市值(元) A股流通股本(股) 市盈率
日期
2016-01-04 600000.SH 浦发银行 15.4467 15.1994 15.4114 14.9786 15.0581 90177135 1550155933 -0.3886 -2.5157 17.1901 0.4834 3.180417e+11 3.180417e+11 1.865347e+10 6.2849
2016-01-05 600000.SH 浦发银行 15.0581 15.1641 15.4732 15.0846 15.4114 55374454 964061502 0.3533 2.3460 17.4099 0.2969 3.255031e+11 3.255031e+11 1.865347e+10 6.4324
2016-01-06 600000.SH 浦发银行 15.4114 15.5174 15.8088 15.3231 15.3584 47869312 843717365 -0.0530 -0.3438 17.6254 0.2566 3.243839e+11 3.243839e+11 1.865347e+10 6.4102
2016-01-07 600000.SH 浦发银行 15.3584 15.0140 15.8883 14.9168 15.8265 54838833 966117848 0.4681 3.0477 17.6174 0.294 3.342702e+11 3.342702e+11 1.865347e+10 6.6056
2016-01-08 600000.SH 浦发银行 15.8265 15.7205 16.0296 15.4732 15.5262 46723139 836146426 -0.3003 -1.8973 17.8958 0.2505 3.279280e+11 3.279280e+11 1.865347e+10 6.4803
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
2017-05-03 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2017-05-04 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2017-05-05 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2017-05-08 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2017-05-09 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN

309 rows × 17 columns

77.使用expending函数计算开盘价的移动窗口均值

  • .expanding() :在你的数据上创建一个扩展窗口。展开窗口从数据的开头开始,并包含截至当前点的所有数据。

  • .mean():计算每个窗口的平均值。

结果是一个pandas Series,其中每个点是截至并包括当天的所有天的平均开盘价。这意味着第一个点将是第一天的开盘价,第二个点将是前两天的平均开盘价,第三个点将是前三天的平均开盘价,以此类推。

data['收盘价(元)'].expanding().mean()
日期
2016-01-04    15.720500
2016-01-05    15.791150
2016-01-06    15.855933
2016-01-07    15.758050
2016-01-08    15.695780
                ...    
2017-05-03    16.047382
2017-05-04    16.043894
2017-05-05    16.040233
2017-05-08    16.036401
2017-05-09    16.032271
Name: 收盘价(元), Length: 309, dtype: float64

78.绘制上一题的移动均值与原始数据折线图

data['收盘价(元)'].expanding().mean().plot()
data['收盘价(元)'].plot()

Pandas进阶修炼120题-第三期(金融数据处理,51-80题),pandas,金融

79.计算布林指标

Bollinger Band (BBands)是一种流行的金融技术分析工具,由John Bollinger在20世纪80年代提出。Bollinger带包括一个作为n周期简单移动平均线(SMA)的中间带,一个在中间带之上的K倍n周期标准差处的上带,以及一个在中间带之下的K倍n周期标准差处的下带。参数N和K通常分别为20和2。

布林指数(Bollinger Band Index,简称Brin Index)是一个衡量股票价格是高还是低的指标。计算公式如下:

$
Brin Index = \frac{Price - Lower Band}{Upper Band - Lower Band}
$

其中:

  • Price为当前价格,
  • Lower Band 是指较低的Bollinger波段,
  • Upper Band 是指较高的Bollinger波段。

布林指数的取值范围为0 ~ 1。当布林指数接近0时,表明该股票的价格接近其低位区间。当它接近1时,它表明股票正在其范围的高端交易。

请注意,您需要有历史价格数据来计算Bollinger波段的移动平均线和标准差。

下面是用熊猫计算布林指数的方法:

# 计算移动平均数和标准偏差
data['MA'] = data['收盘价(元)'].rolling(window = 20).mean()
data['SD'] = data['收盘价(元)'].rolling(window = 20).std()
# 计算上布林带和下布林带
data['UpperBB'] = data['MA'] + (data['SD'] * 2)
data['LowerBB'] = data['MA'] - (data['SD'] * 2)
# 计算布林指数
data['Brin'] = (data['收盘价(元)'] - data['LowerBB']) / (data['UpperBB'] - data['LowerBB'])

80.计算布林线并绘制

plt.figure(figsize = (12,6)) # 设置图形的大小
data['Brin'].plot(grid = True) # 实际创建了图形
plt.title('Brin Index') # 为图形添加了标题
plt.show() # 显示图形


Pandas进阶修炼120题-第三期(金融数据处理,51-80题),pandas,金融

到了这里,关于Pandas进阶修炼120题-第三期(金融数据处理,51-80题)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Pandas入门实践2 -数据处理

    为了准备数据进行分析,我们需要执行数据处理。在本节中,我们将学习如何清理和重新格式化数据(例如,重命名列和修复数据类型不匹配)、对其进行重构/整形,以及对其进行丰富(例如,离散化列、计算聚合和组合数据源)。 数据清洗 在本节中,我们将介绍如何创建

    2023年04月22日
    浏览(66)
  • Pandas对日期数据的处理

    Pandas对日期数据的处理 Pandas中提供了许多简单易用的日期数据处理函数,包括将字符串转换成为对应的日期数据,根据日期来选取数据等等。接下来,让我们了解一下Pandas中对日期数据的处理。 代码如下: 运行结果: 代码如下: 运行结果: pandas可以使用dt对象获取datetim

    2024年02月06日
    浏览(44)
  • pandas处理双周数据

    处理文件题头格式 导入源 合并两列数据

    2024年02月04日
    浏览(39)
  • pandas数据清洗——缺失值处理

    使用DataFrame对象的info()方法 原始数据 ​​ 注:NaN为空缺值   查看是否有缺失值    Non-Null Count列显示的是每个索引中不是空缺的个数 使用DataFrame的isnull()方法和notnull()方法 1. isnull()方法——判断是否为空,输出结果为True和False,不为NaN时返回False,为NaN时返回True。     2.

    2024年02月12日
    浏览(55)
  • 头歌Python实训——pandas数据处理

    任务描述 本关任务: 超市销售数据如图所示 建立excel文件“类别销售”,根据不同类别建立多个工作表,将相同类别的销售信息存放在相应的工作表中。 相关知识 为了完成本关任务,你需要掌握:1.读取excel文件,2.筛选dataframe数据,3.将数据写入工作簿和工作表 从excel文件读

    2024年02月04日
    浏览(39)
  • pandas由入门到精通-数据处理

    文中用S代指Series,用Df代指DataFrame 数据清洗是处理大型复杂情况数据必不可少的步骤,这里总结一些数据清洗的常用方法:包括缺失值、重复值、异常值处理,数据类型统计,分箱,随机采样,向量化编码等方法。每种方法都给出了代码和实例,并用表格进行总结。 判断D

    2024年02月11日
    浏览(46)
  • 数据分析-Pandas如何轻松处理时间序列数据

    时间序列数据在数据分析建模中很常见,例如天气预报,空气状态监测,股票交易等金融场景。此处选择巴黎、伦敦欧洲城市空气质量监测 N O 2 NO_2 N O 2 ​ 数据作为样例。 python数据分析-数据表读写到pandas 经典算法-遗传算法的python实现 经典算法-遗传算法的一个简单例子 大

    2024年01月25日
    浏览(45)
  • Python Pandas 处理Excel数据 制图

    目录 1、饼状图  2、条形统计图

    2024年02月11日
    浏览(40)
  • Python 数据处理与分析之 Pandas 库

    Pandas(Python Data Analysis Library)是一个流行的 Python 第三方库,是数据处理和数据分析中不可或缺的工具之一,用于数据处理和数据分析。 它提供了高效的数据分析方法和灵活且高效的数据结构。相比于其他的数据处理库,pandas更适用于处理具有关系型数据或者带标签数据的情

    2024年02月05日
    浏览(38)
  • 第五章Pandas数据载入与预处理

    1:利用下面哪个可视化绘图可以发现数据的异常点 A.密度图 B.直方图 C.盒图 D.概率图 知识点解析: 密度图:表现与数据值对应的边界或域对象的一种理论图形表示方法 直方图:直方图是数值数据分布的精确图形表示 盒图:是结构化编程中的一种可视化建模 概率图:用图来

    2024年02月05日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包