莆田市建设局网站,互联网+大学生创新创业项目官网,新版wordpress编辑器,注册城乡规划师目录 往期内容#xff1a;第一期#xff1a;Pandas基础#xff08;1-20题#xff09;第二期#xff1a;Pandas数据处理#xff08;21-50题#xff09; 第三期 金融数据处理51.使用绝对路径读取本地Excel数据方法一#xff1a;双反斜杠绝对路径方法二#xff1a;r 拓展… 目录 往期内容第一期Pandas基础1-20题第二期Pandas数据处理21-50题 第三期 金融数据处理51.使用绝对路径读取本地Excel数据方法一双反斜杠绝对路径方法二r 拓展关于正斜杠( / )和反斜杠( \ ) 52.查看数据前三行53.查看每列数据缺失值情况54.提取日期列含有空值的行55.输出每列缺失值具体行数方法一根据列名遍历直接打印空缺值的行方法二标准答案 56.删除所有存在缺失值的行57.绘制收盘价的折线图方法一直接使用.plot绘制 58.同时绘制开盘价与收盘价59.绘制涨跌幅的直方图60.让直方图更细致61.以data的列名创建一个DataFrame62.打印所有换手率不是数字的行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?pwd29eb 提取码29eb –来自百度网盘超级会员V3的分享 往期内容 第一期Pandas基础1-20题 第二期Pandas数据处理21-50题
第三期 金融数据处理
import pandas as pd
import numpy as np
import matplotlib.pyplot as pltplt.rcParams[font.sans-serif] [SimHei]
plt.rcParams[axes.unicode_minus] False51.使用绝对路径读取本地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(rC:\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)
pathhome\\user\\documents\\file.txt52.查看数据前三行
data.head(3)代码简称日期前收盘价(元)开盘价(元)最高价(元)最低价(元)收盘价(元)成交量(股)成交金额(元)涨跌(元)涨跌幅(%)均价(元)换手率(%)A股流通市值(元)总市值(元)A股流通股本(股)市盈率0600000.SH浦发银行2016-01-0416.135616.144416.144415.499715.720542240610754425783-0.4151-2.572517.86020.22643.320318e113.320318e111.865347e106.56141600000.SH浦发银行2016-01-0515.720515.464415.950115.367215.86185805479310341814740.14130.898917.81390.31123.350163e113.350163e111.865347e106.62042600000.SH浦发银行2016-01-0615.861815.808816.020815.623415.9855467726538386673980.12360.779517.93070.25073.376278e113.376278e111.865347e106.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: booldata.isnull().sum()代码 1
简称 2
日期 2
前收盘价(元) 2
开盘价(元) 2
最高价(元) 2
最低价(元) 2
收盘价(元) 2
成交量(股) 2
成交金额(元) 2
涨跌(元) 2
涨跌幅(%) 2
均价(元) 2
换手率(%) 2
A股流通市值(元) 2
总市值(元) 2
A股流通股本(股) 2
市盈率 2
dtype: int6454.提取日期列含有空值的行
data[data[日期].isnull()]代码简称日期前收盘价(元)开盘价(元)最高价(元)最低价(元)收盘价(元)成交量(股)成交金额(元)涨跌(元)涨跌幅(%)均价(元)换手率(%)A股流通市值(元)总市值(元)A股流通股本(股)市盈率327NaNNaNNaTNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN328数据来源Wind资讯NaNNaTNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
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.删除所有存在缺失值的行 备注
axis0-行操作默认1-列操作
howany-只要有空值就删除默认all-全部为空值才删除
inplaceFalse-返回新的数据集默认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股流通股本(股)市盈率26600000.SH浦发银行2016-02-16 00:00:0016.294616.294616.294616.294616.2946----0.00.0----344156547606.75344156547606.7518653471415.06.80127600000.SH浦发银行2016-02-17 00:00:0016.294616.294616.294616.294616.2946----0.00.0----344156547606.75344156547606.7518653471415.06.80128600000.SH浦发银行2016-02-18 00:00:0016.294616.294616.294616.294616.2946----0.00.0----344156547606.75344156547606.7518653471415.06.80129600000.SH浦发银行2016-02-19 00:00:0016.294616.294616.294616.294616.2946----0.00.0----344156547606.75344156547606.7518653471415.06.80130600000.SH浦发银行2016-02-22 00:00:0016.294616.294616.294616.294616.2946----0.00.0----344156547606.75344156547606.7518653471415.06.80131600000.SH浦发银行2016-02-23 00:00:0016.294616.294616.294616.294616.2946----0.00.0----344156547606.75344156547606.7518653471415.06.80132600000.SH浦发银行2016-02-24 00:00:0016.294616.294616.294616.294616.2946----0.00.0----344156547606.75344156547606.7518653471415.06.80133600000.SH浦发银行2016-02-25 00:00:0016.294616.294616.294616.294616.2946----0.00.0----344156547606.75344156547606.7518653471415.06.80134600000.SH浦发银行2016-02-26 00:00:0016.294616.294616.294616.294616.2946----0.00.0----344156547606.75344156547606.7518653471415.06.80135600000.SH浦发银行2016-02-29 00:00:0016.294616.294616.294616.294616.2946----0.00.0----344156547606.75344156547606.7518653471415.06.80136600000.SH浦发银行2016-03-01 00:00:0016.294616.294616.294616.294616.2946----0.00.0----344156547606.75344156547606.7518653471415.06.80137600000.SH浦发银行2016-03-02 00:00:0016.294616.294616.294616.294616.2946----0.00.0----344156547606.75344156547606.7518653471415.06.80138600000.SH浦发银行2016-03-03 00:00:0016.294616.294616.294616.294616.2946----0.00.0----344156547606.75344156547606.7518653471415.06.80139600000.SH浦发银行2016-03-04 00:00:0016.294616.294616.294616.294616.2946----0.00.0----344156547606.75344156547606.7518653471415.06.80140600000.SH浦发银行2016-03-07 00:00:0016.294616.294616.294616.294616.2946----0.00.0----344156547606.75344156547606.7518653471415.06.80141600000.SH浦发银行2016-03-08 00:00:0016.294616.294616.294616.294616.2946----0.00.0----344156547606.75344156547606.7518653471415.06.80142600000.SH浦发银行2016-03-09 00:00:0016.294616.294616.294616.294616.2946----0.00.0----344156547606.75344156547606.7518653471415.06.80143600000.SH浦发银行2016-03-10 00:00:0016.294616.294616.294616.294616.2946----0.00.0----344156547606.75344156547606.7518653471415.06.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 KB63.打印所有换手率为–的行
方法一逐一判断保存
for i in range(len(data)):if data.loc[i,换手率(%)]--:temp temp.append(data.loc[i])temp代码简称日期前收盘价(元)开盘价(元)最高价(元)最低价(元)收盘价(元)成交量(股)成交金额(元)涨跌(元)涨跌幅(%)均价(元)换手率(%)A股流通市值(元)总市值(元)A股流通股本(股)市盈率26600000.SH浦发银行2016-02-16 00:00:0016.294616.294616.294616.294616.2946----0.00.0----344156547606.75344156547606.7518653471415.06.80127600000.SH浦发银行2016-02-17 00:00:0016.294616.294616.294616.294616.2946----0.00.0----344156547606.75344156547606.7518653471415.06.80128600000.SH浦发银行2016-02-18 00:00:0016.294616.294616.294616.294616.2946----0.00.0----344156547606.75344156547606.7518653471415.06.80129600000.SH浦发银行2016-02-19 00:00:0016.294616.294616.294616.294616.2946----0.00.0----344156547606.75344156547606.7518653471415.06.80130600000.SH浦发银行2016-02-22 00:00:0016.294616.294616.294616.294616.2946----0.00.0----344156547606.75344156547606.7518653471415.06.80131600000.SH浦发银行2016-02-23 00:00:0016.294616.294616.294616.294616.2946----0.00.0----344156547606.75344156547606.7518653471415.06.80132600000.SH浦发银行2016-02-24 00:00:0016.294616.294616.294616.294616.2946----0.00.0----344156547606.75344156547606.7518653471415.06.80133600000.SH浦发银行2016-02-25 00:00:0016.294616.294616.294616.294616.2946----0.00.0----344156547606.75344156547606.7518653471415.06.80134600000.SH浦发银行2016-02-26 00:00:0016.294616.294616.294616.294616.2946----0.00.0----344156547606.75344156547606.7518653471415.06.80135600000.SH浦发银行2016-02-29 00:00:0016.294616.294616.294616.294616.2946----0.00.0----344156547606.75344156547606.7518653471415.06.80136600000.SH浦发银行2016-03-01 00:00:0016.294616.294616.294616.294616.2946----0.00.0----344156547606.75344156547606.7518653471415.06.80137600000.SH浦发银行2016-03-02 00:00:0016.294616.294616.294616.294616.2946----0.00.0----344156547606.75344156547606.7518653471415.06.80138600000.SH浦发银行2016-03-03 00:00:0016.294616.294616.294616.294616.2946----0.00.0----344156547606.75344156547606.7518653471415.06.80139600000.SH浦发银行2016-03-04 00:00:0016.294616.294616.294616.294616.2946----0.00.0----344156547606.75344156547606.7518653471415.06.80140600000.SH浦发银行2016-03-07 00:00:0016.294616.294616.294616.294616.2946----0.00.0----344156547606.75344156547606.7518653471415.06.80141600000.SH浦发银行2016-03-08 00:00:0016.294616.294616.294616.294616.2946----0.00.0----344156547606.75344156547606.7518653471415.06.80142600000.SH浦发银行2016-03-09 00:00:0016.294616.294616.294616.294616.2946----0.00.0----344156547606.75344156547606.7518653471415.06.80143600000.SH浦发银行2016-03-10 00:00:0016.294616.294616.294616.294616.2946----0.00.0----344156547606.75344156547606.7518653471415.06.80126600000.SH浦发银行2016-02-16 00:00:0016.294616.294616.294616.294616.2946----0.00.0----344156547606.75344156547606.7518653471415.06.80127600000.SH浦发银行2016-02-17 00:00:0016.294616.294616.294616.294616.2946----0.00.0----344156547606.75344156547606.7518653471415.06.80128600000.SH浦发银行2016-02-18 00:00:0016.294616.294616.294616.294616.2946----0.00.0----344156547606.75344156547606.7518653471415.06.80129600000.SH浦发银行2016-02-19 00:00:0016.294616.294616.294616.294616.2946----0.00.0----344156547606.75344156547606.7518653471415.06.80130600000.SH浦发银行2016-02-22 00:00:0016.294616.294616.294616.294616.2946----0.00.0----344156547606.75344156547606.7518653471415.06.80131600000.SH浦发银行2016-02-23 00:00:0016.294616.294616.294616.294616.2946----0.00.0----344156547606.75344156547606.7518653471415.06.80132600000.SH浦发银行2016-02-24 00:00:0016.294616.294616.294616.294616.2946----0.00.0----344156547606.75344156547606.7518653471415.06.80133600000.SH浦发银行2016-02-25 00:00:0016.294616.294616.294616.294616.2946----0.00.0----344156547606.75344156547606.7518653471415.06.80134600000.SH浦发银行2016-02-26 00:00:0016.294616.294616.294616.294616.2946----0.00.0----344156547606.75344156547606.7518653471415.06.80135600000.SH浦发银行2016-02-29 00:00:0016.294616.294616.294616.294616.2946----0.00.0----344156547606.75344156547606.7518653471415.06.80136600000.SH浦发银行2016-03-01 00:00:0016.294616.294616.294616.294616.2946----0.00.0----344156547606.75344156547606.7518653471415.06.80137600000.SH浦发银行2016-03-02 00:00:0016.294616.294616.294616.294616.2946----0.00.0----344156547606.75344156547606.7518653471415.06.80138600000.SH浦发银行2016-03-03 00:00:0016.294616.294616.294616.294616.2946----0.00.0----344156547606.75344156547606.7518653471415.06.80139600000.SH浦发银行2016-03-04 00:00:0016.294616.294616.294616.294616.2946----0.00.0----344156547606.75344156547606.7518653471415.06.80140600000.SH浦发银行2016-03-07 00:00:0016.294616.294616.294616.294616.2946----0.00.0----344156547606.75344156547606.7518653471415.06.80141600000.SH浦发银行2016-03-08 00:00:0016.294616.294616.294616.294616.2946----0.00.0----344156547606.75344156547606.7518653471415.06.80142600000.SH浦发银行2016-03-09 00:00:0016.294616.294616.294616.294616.2946----0.00.0----344156547606.75344156547606.7518653471415.06.80143600000.SH浦发银行2016-03-10 00:00:0016.294616.294616.294616.294616.2946----0.00.0----344156547606.75344156547606.7518653471415.06.801
方法二根据 isin() 判断是否具有包含关系
data[data[换手率(%)].isin([--])] # 注意传入的值是列表类型的数据代码简称日期前收盘价(元)开盘价(元)最高价(元)最低价(元)收盘价(元)成交量(股)成交金额(元)涨跌(元)涨跌幅(%)均价(元)换手率(%)A股流通市值(元)总市值(元)A股流通股本(股)市盈率26600000.SH浦发银行2016-02-1616.294616.294616.294616.294616.2946----0.00.0----3.441565e113.441565e111.865347e106.80127600000.SH浦发银行2016-02-1716.294616.294616.294616.294616.2946----0.00.0----3.441565e113.441565e111.865347e106.80128600000.SH浦发银行2016-02-1816.294616.294616.294616.294616.2946----0.00.0----3.441565e113.441565e111.865347e106.80129600000.SH浦发银行2016-02-1916.294616.294616.294616.294616.2946----0.00.0----3.441565e113.441565e111.865347e106.80130600000.SH浦发银行2016-02-2216.294616.294616.294616.294616.2946----0.00.0----3.441565e113.441565e111.865347e106.80131600000.SH浦发银行2016-02-2316.294616.294616.294616.294616.2946----0.00.0----3.441565e113.441565e111.865347e106.80132600000.SH浦发银行2016-02-2416.294616.294616.294616.294616.2946----0.00.0----3.441565e113.441565e111.865347e106.80133600000.SH浦发银行2016-02-2516.294616.294616.294616.294616.2946----0.00.0----3.441565e113.441565e111.865347e106.80134600000.SH浦发银行2016-02-2616.294616.294616.294616.294616.2946----0.00.0----3.441565e113.441565e111.865347e106.80135600000.SH浦发银行2016-02-2916.294616.294616.294616.294616.2946----0.00.0----3.441565e113.441565e111.865347e106.80136600000.SH浦发银行2016-03-0116.294616.294616.294616.294616.2946----0.00.0----3.441565e113.441565e111.865347e106.80137600000.SH浦发银行2016-03-0216.294616.294616.294616.294616.2946----0.00.0----3.441565e113.441565e111.865347e106.80138600000.SH浦发银行2016-03-0316.294616.294616.294616.294616.2946----0.00.0----3.441565e113.441565e111.865347e106.80139600000.SH浦发银行2016-03-0416.294616.294616.294616.294616.2946----0.00.0----3.441565e113.441565e111.865347e106.80140600000.SH浦发银行2016-03-0716.294616.294616.294616.294616.2946----0.00.0----3.441565e113.441565e111.865347e106.80141600000.SH浦发银行2016-03-0816.294616.294616.294616.294616.2946----0.00.0----3.441565e113.441565e111.865347e106.80142600000.SH浦发银行2016-03-0916.294616.294616.294616.294616.2946----0.00.0----3.441565e113.441565e111.865347e106.80143600000.SH浦发银行2016-03-1016.294616.294616.294616.294616.2946----0.00.0----3.441565e113.441565e111.865347e106.801
64.重置data的行号
data.reset_index(drop True)
data.head()代码简称日期前收盘价(元)开盘价(元)最高价(元)最低价(元)收盘价(元)成交量(股)成交金额(元)涨跌(元)涨跌幅(%)均价(元)换手率(%)A股流通市值(元)总市值(元)A股流通股本(股)市盈率0600000.SH浦发银行2016-01-0416.135616.144416.144415.499715.720542240610754425783-0.4151-2.572517.86020.22643.320318e113.320318e111.865347e106.56141600000.SH浦发银行2016-01-0515.720515.464415.950115.367215.86185805479310341814740.14130.898917.81390.31123.350163e113.350163e111.865347e106.62042600000.SH浦发银行2016-01-0615.861815.808816.020815.623415.9855467726538386673980.12360.779517.93070.25073.376278e113.376278e111.865347e106.67203600000.SH浦发银行2016-01-0715.985515.720515.808815.367215.464411350479199502702-0.5211-3.259717.57660.06083.266223e113.266223e111.865347e106.45454600000.SH浦发银行2016-01-0815.464415.667515.791214.934515.4467719182961262105060-0.0177-0.114217.54920.38553.262492e113.262492e111.865347e106.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 KB65.删除所有换手率为非数字的行
k []
for i in range(len(data)):if type(data.loc[i,换手率(%)]) ! float:k.append(i)
data data.drop(k)
data.head()代码简称日期前收盘价(元)开盘价(元)最高价(元)最低价(元)收盘价(元)成交量(股)成交金额(元)涨跌(元)涨跌幅(%)均价(元)换手率(%)A股流通市值(元)总市值(元)A股流通股本(股)市盈率0600000.SH浦发银行2016-01-0416.135616.144416.144415.499715.720542240610754425783-0.4151-2.572517.86020.22643.320318e113.320318e111.865347e106.56141600000.SH浦发银行2016-01-0515.720515.464415.950115.367215.86185805479310341814740.14130.898917.81390.31123.350163e113.350163e111.865347e106.62042600000.SH浦发银行2016-01-0615.861815.808816.020815.623415.9855467726538386673980.12360.779517.93070.25073.376278e113.376278e111.865347e106.67203600000.SH浦发银行2016-01-0715.985515.720515.808815.367215.464411350479199502702-0.5211-3.259717.57660.06083.266223e113.266223e111.865347e106.45454600000.SH浦发银行2016-01-0815.464415.667515.791214.934515.4467719182961262105060-0.0177-0.114217.54920.38553.262492e113.262492e111.865347e106.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: float6468.计算前一天与后一天收盘价变化率
方法一根据业务知识计算变化率
(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()方法计算当前元素与系列中前一个元素之间的变化百分比。默认情况下它计算紧跟前一个元素的变化百分比(lag1)。这通常用于时间序列分析以创建从一个时期到下一个时期的一系列百分比变化。
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: float6469.设置日期为索引
data data.set_index(日期)
data代码简称前收盘价(元)开盘价(元)最高价(元)最低价(元)收盘价(元)成交量(股)成交金额(元)涨跌(元)涨跌幅(%)均价(元)换手率(%)A股流通市值(元)总市值(元)A股流通股本(股)市盈率日期2016-01-04600000.SH浦发银行16.135616.144416.144415.499715.720542240610754425783-0.4151-2.572517.86020.22643.320318e113.320318e111.865347e106.56142016-01-05600000.SH浦发银行15.720515.464415.950115.367215.86185805479310341814740.14130.898917.81390.31123.350163e113.350163e111.865347e106.62042016-01-06600000.SH浦发银行15.861815.808816.020815.623415.9855467726538386673980.12360.779517.93070.25073.376278e113.376278e111.865347e106.67202016-01-07600000.SH浦发银行15.985515.720515.808815.367215.464411350479199502702-0.5211-3.259717.57660.06083.266223e113.266223e111.865347e106.45452016-01-08600000.SH浦发银行15.464415.667515.791214.934515.4467719182961262105060-0.0177-0.114217.54920.38553.262492e113.262492e111.865347e106.4471......................................................2017-05-03600000.SH浦发银行15.160015.160015.160015.050015.080014247943215130847-0.0800-0.527715.09910.06593.260037e113.260037e112.161828e106.13952017-05-04600000.SH浦发银行15.080015.070015.070014.900014.980019477788291839737-0.1000-0.663114.98320.09013.238418e113.238418e112.161828e106.09882017-05-05600000.SH浦发银行14.980014.950014.980014.520014.920040194577592160198-0.0600-0.400514.73230.18593.225447e113.225447e112.161828e106.07442017-05-08600000.SH浦发银行14.920014.780014.900014.510014.860043568576638781010-0.0600-0.402114.66150.20153.212476e113.212476e112.161828e106.05002017-05-09600000.SH浦发银行14.860014.690014.840014.660014.760019225492283864640-0.1000-0.672914.7650.08893.190858e113.190858e112.161828e106.0093
309 rows × 17 columns
70.以5个数据作为一个数据滑动窗口在这个5个数据上取均值(收盘价)
.rolling(window5):这将创建数据的滚动视图窗口大小为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: float6471.以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: float6472.将收盘价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: float64data[收盘价(元)].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: float64rolling() 和 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-04NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN2016-01-05NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN2016-01-06NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN2016-01-07NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN2016-01-08NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN......................................................2017-05-03600000.SH浦发银行15.0015.0215.1014.9915.05129759191952968620.050.333315.05070.063.253551e113.253551e112.161828e106.12732017-05-04600000.SH浦发银行15.0515.0615.1115.0015.05149398712250226680.000.000015.06190.06913.253551e113.253551e112.161828e106.12732017-05-05600000.SH浦发银行15.0515.0515.2515.0315.21228876453457915260.161.063115.10820.10593.288140e113.288140e112.161828e106.19252017-05-08600000.SH浦发银行15.2115.1515.2215.0815.21157185092384191610.000.000015.16810.07273.288140e113.288140e112.161828e106.19252017-05-09600000.SH浦发银行15.2115.2115.2215.1315.1612607509191225527-0.05-0.328715.16760.05833.277331e113.277331e112.161828e106.1721
309 rows × 17 columns
76.将数据向前移动5天
data.shift(-5)代码简称前收盘价(元)开盘价(元)最高价(元)最低价(元)收盘价(元)成交量(股)成交金额(元)涨跌(元)涨跌幅(%)均价(元)换手率(%)A股流通市值(元)总市值(元)A股流通股本(股)市盈率日期2016-01-04600000.SH浦发银行15.446715.199415.411414.978615.0581901771351550155933-0.3886-2.515717.19010.48343.180417e113.180417e111.865347e106.28492016-01-05600000.SH浦发银行15.058115.164115.473215.084615.4114553744549640615020.35332.346017.40990.29693.255031e113.255031e111.865347e106.43242016-01-06600000.SH浦发银行15.411415.517415.808815.323115.358447869312843717365-0.0530-0.343817.62540.25663.243839e113.243839e111.865347e106.41022016-01-07600000.SH浦发银行15.358415.014015.888314.916815.8265548388339661178480.46813.047717.61740.2943.342702e113.342702e111.865347e106.60562016-01-08600000.SH浦发银行15.826515.720516.029615.473215.526246723139836146426-0.3003-1.897317.89580.25053.279280e113.279280e111.865347e106.4803......................................................2017-05-03NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN2017-05-04NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN2017-05-05NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN2017-05-08NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN2017-05-09NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
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: float6478.绘制上一题的移动均值与原始数据折线图
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() # 显示图形