Pandas进阶修炼120题-第三期(金融数据处理,51-80题)
目录
- 往期内容:
- 第一期:Pandas基础(1-20题)
- 第二期:Pandas数据处理(21-50题)
- 第三期 金融数据处理
- 51.使用绝对路径读取本地Excel数据
- 方法一:双反斜杠绝对路径
- 方法二:r' '
- 拓展:关于正斜杠(' / ')和反斜杠(' \ ')
- 52.查看数据前三行
- 53.查看每列数据缺失值情况
- 54.提取日期列含有空值的行
- 55.输出每列缺失值具体行数
- 方法一:根据列名遍历,直接打印空缺值的行
- 方法二:标准答案
- 56.删除所有存在缺失值的行
- 57.绘制收盘价的折线图
- 方法一:直接使用.plot绘制
- 58.同时绘制开盘价与收盘价
- 59.绘制涨跌幅的直方图
- 60.让直方图更细致
- 61.以data的列名创建一个DataFrame
- 62.打印所有换手率不是数字的行
- 63.打印所有换手率为--的行
- 方法一:逐一判断保存
- 方法二:根据 isin() 判断是否具有包含关系
- 64.重置data的行号
- 65.删除所有换手率为非数字的行
- 66.绘制换手率的密度曲线
- 67.计算前一天与后一天收盘价的差值
- 方法一:基于业务上的理解,直接使用收盘价-前一天的收盘价
- 方法二:直接使用.diff() 计算
- 68.计算前一天与后一天收盘价变化率
- 方法一:根据业务知识计算变化率
- 方法二:直接使用pct_change() 计算
- 69.设置日期为索引
- 70.以5个数据作为一个数据滑动窗口,在这个5个数据上取均值(收盘价)
- 71.以5个数据作为一个数据滑动窗口,计算这五个数据总和(收盘价)
- 72.将收盘价5日均线、20日均线与原始数据绘制在同一个图上
- 73.按周为采样规则,取一周收盘价最大值
- 方法一:使用滑动窗口以7天为采样
- 方法二(正解):按周重采样
- rolling() 和 ressample() 的区别与联系
- 74.绘制重采样数据与原始数据
- 75.将数据往后移动5天
- 76.将数据向前移动5天
- 77.使用expending函数计算开盘价的移动窗口均值
- 78.绘制上一题的移动均值与原始数据折线图
- 79.计算布林指标
- 80.计算布林线并绘制
自己再写一遍的pandas习题,相比于标准答案添加了自己的理解与注释,也可直接下载链接上的习题
链接:https://pan.baidu.com/s/1arrqcBFZKqJngzRzUB2QfA?pwd=29eb
提取码:29eb
–来自百度网盘超级会员V3的分享
往期内容:
第三期 金融数据处理
import pandas as pd
import numpy as np
import matplotlib.pyplot as pltplt.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’ ’

data = pd.read_excel(r'C:\Users\XXX\Desktop\DataAnalyse\组内出数任务\data1\pandas120\pandas120_51_80.xlsx')
拓展:关于正斜杠(’ / ‘)和反斜杠(’ \ ')
关于正斜杠(’ / ‘)和反斜杠(’ \ '):
在文件路径中使用正斜杠(’ / ‘)还是反斜杠(’ \ ')取决于所使用的操作系统。这里有一个简短的概述:
-
正斜杠(’ / ‘):这是Unix和类Unix系统(如Linux和macOS)的标准。例如,Unix系统中的路径可能看起来像’ /home/user/documents/file.txt '。
-
反斜杠(’ \ '):这是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')
# 等价于
plt.plot(data['收盘价(元)'])
58.同时绘制开盘价与收盘价
data[['开盘价(元)','收盘价(元)']].plot()
59.绘制涨跌幅的直方图
data['涨跌幅(%)'].plot(kind = 'hist')
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()
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')
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()
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()
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()
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基础(1-20题)第二期:Pandas数据处理(21-50题) 第三期 金融数据处理51.使用绝对路径读取本地Excel数据方法一:双反斜杠绝对路径方法二:r 拓展…...

3、HAproxy高级配置
基于cookie的会话保持 在 HAProxy 中,可以通过使用 cookie 配置来实现基于 Cookie 的会话保持。cookie 配置用于配置与会话保持相关的选项,允许您定义要在HTTP响应中插入或重写的Cookie以及其他与Cookie会话保持相关的参数。 以下是一些常用的 cookie 配…...

tcpdump网络抓包工具的使用
tcpdump 是一款用在linux系统上的网络抓包工具 1、 基本语法 tcpdump 的常用参数如下: tcpdump -i eth0 -nn -s0 -v port 80-i : 选择要捕获的接口,通常是以太网卡或无线网卡,也可以是 vlan 或其他特殊接口。如果该系统上只有一个网络接口&…...

AMEYA360旗下品牌:日本SUSUMU推出RGV系列贴片电阻器新产品
电动汽车、机器人、精密测量仪器——在上述三例应用领域中,具有高精度、坚固性和长期稳定性的组件是必不可少的。对于这些和类似的应用,RGV系列精密电阻器是理想的选择。 RGV系列电阻器 RGV系列金属薄膜贴片电阻器的电阻值范围为120kΩ至3MΩ(…...

git-版本控制器
集中式版本控制工具(不常用) 版本库集中于中央服务器,team要联网才能工作(下载代码) SVN CVS 分布式版本控制工具 每个电脑上都有一个完整的版本库,工作时无需联网,可以把修改推送给其他人来…...

台式机/工控机通过网线共享笔记本电脑无线网络linux系统下 usb网卡的驱动安装
一、台式机/工控机通过网线共享笔记本电脑无线网络 1、 将台式机通过网线和笔记本连接。 2、 将笔记本的“本地连接”和“无线网络连接”的ipv4均设置为自动获取。 4.修改台式机的IP地址为如下(对应笔记本信息) IP地址为192.168.XXX.12 子网掩码为255.2…...

kotlin 编写一个简单的天气预报app(五)增加forcast接口并显示
参考资料 OpenWeatherMap提供了一个/forecast接口,用于获取未来几天的天气预报。你可以使用HTTP GET请求访问该接口,并根据你所在的城市或地理坐标获取相应的天气数据。 以下是一个示例请求的URL和一些常用的参数: URL: http://api.openwe…...

vs调试引发了异常:读取访问权限冲突,argv是0x7
vs2019写了几句小代码,结果报错: 引发了异常:读取访问权限冲突,argv是0x7 查了一堆是什么数组越界了,空指针异常了啥的。 只好都注释掉只留下主函数,结果还是报错,定睛一看才发现原因:main函数忘写第一…...

【电影推荐系统】实时推荐
概览 技术方案: 日志采集服务:通过利用Flume-ng对业务平台中用户对于电影的一次评分行为进行采集,实时发送到Kafka集群。消息缓冲服务:项目采用Kafka作为流式数据的缓存组件,接受来自Flume的数据采集请求。并将数据推…...

Delphi 开发不一样的窗体标题栏:TTitleBarPanel
目录 TTitleBarPanel 的使用 TTitleBarPanel 的使用进阶 一、设置标题栏高度、颜色 二、个性化标题栏的关闭等按键 我们在用Delphi开发程序的时候,窗体的标题栏一般都是标准的windows标题栏,上面包括:程序图标、标题、最小化、最大化、关闭…...

Quartz中禁止并发机制源码级解析
文章目录 Quartz进行任务调度时通常会要求一个任务禁止并发执行,此时只需要在Job类上面添加一个注解DisallowConcurrentExecution即可。在保存到数据库里面时,对应QRTZ_JOB_DETAILS表中的IS_NONCONCURRENT字段的值为1(true)。那么…...

为什么从公有云迁移到私有云的越来越多?
随着云计算的快速发展,越来越多的组织开始考虑将其IT基础设施从公有云迁移到私有云。这种转变背后存在着一系列的原因和动机,下面我们将探讨一些常见的迁移原因。 首先,数据安全和隐私是许多组织选择私有云的主要原因之一。在公有云中&#…...

用shell实现MySQL分库分表操作
#!/bin/bash mysql_cmd-uroot -p123 #定义变量保存密码 exclude_dbinformation_schema|performance_schema|sys #数据库 bak_path/backup/db #备份路径 mysql ${mysql_cmd} -e show databases -N | egrep -v "${exclude_db}" > dbname while read line do …...

php 适配器模式
一,适配器模式,属于结构设计模式的一种,用于将一个类的接口转换成客户期望的接口。 1,目标接口(Target Interface):是客户期望的接口,定义了客户要调用的方法。 2,适配器…...

Scratch Blocks自定义组件之「下拉图标」
一、背景 由于自带的下拉图标是给水平布局的block使用,放在垂直布局下显得别扭,而且下拉选择后回修改image字段的图片,这让我很不爽,所以在原来的基础上稍作修改,效果如下: 二、使用说明 (1&am…...

Robot Framweork之UI自动化测试---分层设计
Robot Framework 的分层思想是一种测试设计和代码组织的模式,它将测试用例的实现和测试执行逻辑分离,以提高测试的可维护性、可读性和可扩展性。 一、分层思想 在实际项目中,一般分为三层:元素层,流程层,用…...

MySQL8.0/8.x更新用户密码命令
authentication_string 这是Mysql8.0新做出的修改,在旧版本中使用的是password()函数。 2,在网上找到的mysql忘记密码的解决方案中,大多会使用 UPDATE user SET authentication_string12345 WHERE userroot; 来直接将密码改成12345࿰…...

【MySQL】下载安装以及SQL介绍
1,数据库相关概念 以前我们做系统,数据持久化的存储采用的是文件存储。存储到文件中可以达到系统关闭数据不会丢失的效果,当然文件存储也有它的弊端。 假设在文件中存储以下的数据: 姓名 年龄 性别 住址 张三 23 男 北京…...

算法题--二叉树(二叉树的最近公共祖先、重建二叉树、二叉搜索树的后序遍历序列)
目录 二叉树 题目 二叉树的最近公共祖先 原题链接 解析 二叉搜索树的最近公共节点 核心思想 答案 重建二叉树 题目链接 解析 核心思想 答案 二叉搜索树的后序遍历序列 原题链接 解析 核心思想 答案 二叉树 该类题目的解决一般是通过节点的遍历去实现&#x…...

mysql的基础面经-索引、事务
1 聚簇索引 1 和主键索引的关系 2 和非聚簇索引的关系,其叶子节点存储的是聚簇索引中的主键 3 索引覆盖机制使得非聚簇索引不用回表二次查询 2 举一个使用索引覆盖的例子 我的项目中没有使用到覆盖索引,但是可以举一个例子,比如我直接为年…...

Windows下双网卡配置静态路由,实现内外网同时使用
怎么样设置双网卡?内网外网两个网络这么同时连接? 接下来听好了,赶紧动手 情况描述: 我使用的Windows10电脑,支持双网卡工作 目前我工作需要使用的使用内网,但是又需要使用外网,需要同时使用&a…...

Spring整合Mybatis、Spring整合JUnit
🐌个人主页: 🐌 叶落闲庭 💨我的专栏:💨 c语言 数据结构 javaweb 石可破也,而不可夺坚;丹可磨也,而不可夺赤。 Spring整合 一、Spring整合Mybatis1.1 整合Mybatis&#x…...

Devops系统中jira平台迁移
需求:把aws中的devops系统迁移到华为云中,其中主要是jira系统中的数据迁移,主要方法为在华为云中建立一套 与aws相同的devops平台,再把数据库和文件系统中的数据迁移,最后进行测试。 主要涉及到的服务集群CCE、数据库mysql、弹性文件服务SFS、数据复制DRS、弹性负载均衡ELB。 迁…...

【雕爷学编程】MicroPython动手做(29)——物联网之SIoT
知识点:什么是掌控板? 掌控板是一块普及STEAM创客教育、人工智能教育、机器人编程教育的开源智能硬件。它集成ESP-32高性能双核芯片,支持WiFi和蓝牙双模通信,可作为物联网节点,实现物联网应用。同时掌控板上集成了OLED…...

LAXCUS分布式操作系统引领科技潮流,进入百度首页
信息源自某家网络平台,以下原样摘抄贴出。 随着科技的飞速发展,分布式操作系统做为通用基础平台,为大数据、高性能计算、人工智能提供了强大的数据和算力支持,已经成为了当今计算机领域的研究热点。近日,一款名为LAXCU…...

Linux--按行读取数据:fgets
函数定义: char *fgets(char *s,int size,FILE *stream); S是指接受数据缓冲区,用于存放stream里读取的数据 size是指缓冲区的大小 返回值为NULL表明读取失败,反之读取成功...

express学习笔记5 - 自定义路由异常处理中间件
修改router/index.js,添加异常处理中间件 *** 自定义路由异常处理中间件* 注意两点:* 第一,方法的参数不能减少* 第二,方法的必须放在路由最后*/ router.use((err, req, res, next) > {console.log(err);const msg (err &…...

filebeat介绍
1、filebeat概述 Filebeat是用于转发和集中日志数据的轻量级传送工具。Filebeat监视您指定的日志文件或位置,收集日志事件,并将它们转发到Elasticsearch或 Logstash或kafka进行索引 1.1 Filebeat两个主要组件 prospector 和 harvester。 prospector&a…...

使用SSM框架实现个人博客管理平台以及实现Web自动化测试
文章目录 前言1. 项目概述2. 项目需求2.1功能需求2.2 其他需求2.3 系统功能模块图 3. 开发环境4. 项目结构5. 部分功能介绍5.1 数据库密码密文存储5.2 统一数据格式返回5.3 登录拦截器 6. 项目展示7. 项目测试7.1 测试用例7.2 执行部分自动化测试用例 前言 在几个月前实现了一…...

【深度学习】MAT: Mask-Aware Transformer for Large Hole Image Inpainting
论文:https://arxiv.org/abs/2203.15270 代码:https://github.com/fenglinglwb/MAT 文章目录 AbstractIntroductionRelated WorkMethod总体架构卷积头Transformer主体Adjusted Transformer Block Multi-Head Contextual Attention Style Manipulation Mo…...