数据来源:和鲸社区-Numpy+Pandas数据处理·第四关
主要内容:

  • 缺失数据
  1. 查看每列 数据的缺失情况
  2. 输出每列具体缺失的行数
  3. 删除所有存在缺失值的行
  • 绘制折线图
  1. 收盘价折线图
  2. 收盘价开盘价折线图
  3. 收盘价5日均线,20日均线图
  4. 收盘价上轨线,中轨线,下轨线折线图
  • 绘制密度图
  1. 删除换手率为非数字的行
  2. 绘制换手率密度图
  3. 同时绘制密度图和直方图
  • pandas窗口函数rolling 和expanding
  • 重采样 resample
  • 计算相邻两天的差值和变化率
  • 数据前移后移shift()
导入数据
import pandas as pd
data = pd.read_excel('/home/mw/input/pandas1206855/600000.SH.xls')
data.head()
data.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 329 entries, 0 to 328
Data columns (total 18 columns):
代码           328 non-null object
简称           327 non-null object
日期           327 non-null datetime64[ns]
前收盘价(元)      327 non-null float64
开盘价(元)       327 non-null float64
最高价(元)       327 non-null float64
最低价(元)       327 non-null float64
收盘价(元)       327 non-null float64
成交量(股)       327 non-null object
成交金额(元)      327 non-null object
涨跌(元)        327 non-null float64
涨跌幅(%)       327 non-null float64
均价(元)        327 non-null object
换手率(%)       327 non-null object
A股流通市值(元)    327 non-null float64
总市值(元)       327 non-null float64
A股流通股本(股)    327 non-null float64
市盈率          327 non-null float64
dtypes: datetime64[ns](1), float64(11), object(6)
memory usage: 46.3+ KB
缺失值处理
# 查看每列数据缺失情况
data.isnull().sum()
# 提取日期列含有空值的行
data[data['日期'].isnull()]
#输出每列缺失值具体行数
for columnname in data.columns:if data[columnname].count() != len(data):loc = data[columnname][data[columnname].isnull().values == True].index.tolist()print('列名:"{}",第{}行位置有缺失值'.format(columnname,loc))

# 删除所有存在缺失值的行
data.dropna(axis=0,how='any',inplace=True)
    语法:df.dropna(axis=0, how='any', thresh=None, subset=None, inplace=False)参数:axis : {0 or 'index', 1 or 'columns'}, default 00, or 'index':删除包含丢失值的行1, or 'columns':删除包含丢失值的列默认为0how : {'any', 'all'}, default 'any''any': 如果存在NA值,则删除该行或列'all': 如果所有值都是NA,则删除该行或列thresh: int,保留含有int个非空值的行subset: 对特定的列进行缺失值删除处理不同情况参数设置:删除所有有缺失值的行df.dropna()删除所有有缺失值的列df.dropna(axis='columns')df.dropna(axis=1)删除所有值缺失的行df.dropna(how='all')删除至少有两个非缺失值的行df.dropna(thresh=2)指定判断缺失值的列范围df.dropna(subset=['name', 'born'])使删除和的结果生效df.dropna(inplace=True)指定列的缺失值删除df.toy.dropna()
绘制折线图

1.绘制收盘价的折线图

#方法一:
import matplotlib.pyplot as plt
plt.style.use('seaborn-darkgrid')  #设置画图风格
plt.rc('font', size=6) #设置图中字体和大小
plt.rc('figure', figsize=(16,6), dpi=150) #设置图的大小
data['收盘价(元)'].plot()#方法二:
from matplotlib import pyplot as plt
import matplotlib#设置画图字体格式
font = {'family':'MicroSoft YaHei', 'weight':'bold', 'size': 12}
matplotlib.rc('font', **font)
#设置图片大小和分辨率
plt.figure(figsize=(16, 6), dpi=80)#绘制折线图
x = data['日期']
y = data['收盘价(元)']
plt.plot(x, y, label='收盘价(元)', color='orange', linestyle='-')#设置x,y轴标签
plt.xlabel("日期")
plt.ylabel("收盘价(元)")
plt.title("每日收盘价趋势图")#绘制网格
plt.grid(alpha=0.4, linestyle='--')#alpha表示透明度#添加图例(设置图例时,必须在绘制时,加上label字段,见上plt.plot()函数)
'''upper right;upper left;lower left;lower right;best; right; centercenter left; center rightlower center; upper center
'''
plt.legend(loc="upper right")#展示图
plt.show()

2.同时绘制开盘价和收盘价

#方法一:
#设置画图字体格式
font = {'family':'MicroSoft YaHei', 'weight':'bold', 'size': 12}
matplotlib.rc('font', **font)#设置图片大小和分辨率
plt.figure(figsize=(16, 6), dpi=80)#绘制折线图
x = data['日期']
y1 = data['收盘价(元)']
y2 = data['开盘价(元)']
plt.plot(x, y1, label='收盘价(元)', color='orange', linestyle='-')
plt.plot(x, y2, label='开盘价(元)', color='blue', linestyle='-')#设置x,y轴标签
plt.xlabel("日期")
plt.ylabel("价钱(元)")
plt.title("每日开盘收盘趋势图")#绘制网格
plt.grid(alpha=0.4, linestyle='--')#alpha表示透明度#添加图例(设置图例时,必须在绘制时,加上label字段,见上plt.plot()函数)
'''upper right;upper left;lower left;lower right;best; right; centercenter left; center rightlower center; upper center
'''
plt.legend(loc="upper right")#展示图
plt.show()
#方法二:
plt.rcParams['font.sans-serif']=['Simhei']  #显示中文
plt.rcParams['axes.unicode_minus']=False    #设置显示中文后,负号显示受影响,显示负号  plt.rc('figure', figsize=(16, 6), dpi=150) #设置图的大小
data[['收盘价(元)', '开盘价(元)']].plot()

3.收盘价5日均线,20日均线图

#方法一:
mean_5 = data['收盘价(元)'].rolling(5).mean()
mean_20 = data['收盘价(元)'].rolling(20).mean()font = {'family':'MicroSoft YaHei', 'weight':'bold', 'size': 12}
matplotlib.rc('font', **font)plt.rc('figure', figsize=(16,6), dpi=150) #设置图的大小
plt.plot(data['收盘价(元)'], label='原始数据')
plt.plot(mean_5, label='5日均线')
plt.plot(mean_20, label='20日均线')plt.legend(loc='upper right')
plt.show()
#方法二:
#data['收盘价(元)'].plot()
#data['收盘价(元)'].rolling(5).mean().plot()
#data['收盘价(元)'].rolling(20).mean().plot()

4.绘制上轨线,下轨线,中轨线折线图

MB = data['收盘价(元)'].rolling(20).mean()
UP = MB+MD*2
DN = MB-MD*2font = {'family':'MicroSoft YaHei', 'weight':'bold', 'size': 12}
matplotlib.rc('font', **font)plt.rc('figure', figsize=(16,6), dpi=150) #设置图的大小plt.plot(MB, label='中轨线')
plt.plot(UP, label='上轨线')
plt.plot(DN, label='下轨线')plt.xlabel('index')
plt.ylabel('开盘价(元)')
plt.legend(loc='upper right')
plt.grid(alpha=0.4)
plt.show()
绘制密度图
# 打印所有换手率不是数字的行
for i in range(len(data)):if type(data['换手率(%)'][i]) != float: #data['换手率(%)'][i]或写成data.iloc[i, 13]temp = temp.append(data.loc[i])
temp.head()
 # 如果是判断某一列(字符串类型)是否包含指定字符串:# 方法一:#      df[df["columns"].str.contains("--")]# 方法二:#   isin()函数:清洗数据,删选过滤掉DataFrame中一些行data[data['换手率(%)'].isin(['--'])]

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

# 删除所有换手率为非数字的行
k = []
for i in range(len(data)):if type(data['换手率(%)'][i]) != float: #data['换手率(%)'][i]或写成data.iloc[i, 13]k.append(i)
data.drop(labels=k, inplace=True)
data

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

# 绘制换手率的密度曲线# 密度图(density plots),也叫核密度图( kernel density estimate,KDE)是理解数值变量分布的另一个方法。相比直方图,它的主要优势是不依赖于柱的尺寸,更加清晰。
#方法一:
data['换手率(%)'].plot.kde()
#方法二:
data['换手率(%)'].plot(kind='kde')


3.同时显示密度图与直方图

#同时显示密度图与直方图
import seaborn as sns, numpy as np
sns.set(); np.random.seed(0)
ax = sns.distplot(data['换手率(%)'])

窗口函数rolling和expanding
Pandas进阶之窗口函数rolling()和expanding():https://www.jianshu.com/p/b8c795345e93rolling()函数,是固定窗口大小,进行滑动计算,expanding()函数只设置最小的观测值数量,不固定窗口大小,实现累计计算,即不断扩展;DataFrame.expanding(min_periods = 1,center = False,axis = 0)
# 设置日期为索引
data = data.set_index('日期')
#以5个数据作为一个数据滑动窗口,在这5个数据上取均值(收盘价)
data['收盘价(元)'].rolling(5).mean()
# 以5个数据作为一个数据滑动窗口,计算这五个数据总和(收盘价)
data['收盘价(元)'].rolling(5).sum()
重采样resample

Python3 如何使用Pandas库将日数据转换为周数据、月数据或季度数据https://blog.csdn.net/weixin_44904908/article/details/107065633
pandas的resample重采样 (方法各参数详解)https://www.cnblogs.com/jingsupo/p/pandas-resample.html

# 按周为采样规则,取一周收盘价最大值
data['收盘价(元)'].resample('W').max()
# 绘制重采样数据与原始数据
plt.figure(figsize=(16, 6), dpi=80)
data['收盘价(元)'].plot()
data['收盘价(元)'].resample('7D').max().plot()
计算相邻两天的差值和变化率
#计算前一天与后一天的收盘价的差值
#方法一:
# data['收盘价(元)'].diff()
#方法二:shift(1)表示上移一位
diff = data['收盘价(元)'] - data['收盘价(元)'].shift(1)
diff
# 计算前一天与后一天收盘价变化率
#方法一:
# data['收盘价(元)'].pct_change()
#方法二:
data['收盘价(元)']/data['收盘价(元)'].shift(1) - 1
数据前移后移
data.shift(5)  # 前移
data.shift(-5) # 后移

python数据分析--金融数据处理相关推荐

  1. Python数据分析-异常数据处理

    本文为博主在处理异常数据的笔记与总结,如有理解不当之处,欢迎指正. 个人博客连接: JMX的个人博客 本篇文章主要是解决单变量数据集中的异常点分析,本代码中对异常数据的处理方式为删除,剔除异常数据,也 ...

  2. python输入年月日输出年月日_【手把手教你】Python金融数据处理

    由于大多数人骨子里倾向于投机或赌博,受欲望.恐惧和贪婪所左右,因此大多数时间里股票市场都是非理性的,容易有过激的股价波动. By 本杰明·格雷厄姆 引言 时间序列是金融量化分析中最常见的数据类型,记录 ...

  3. python金融编程入门_【量化小讲堂- Python、pandas技巧系列】如何快速上手使用Python进行金融数据分析...

    如何快速上手使用Python进行金融数据分析 引言: 本系列帖子"量化小讲堂",通过实际案例教初学者使用python.pandas进行金融数据处理,希望能对大家有帮助. [必读文章 ...

  4. python数据分析之金融欺诈行为检测

    python数据分析之金融欺诈行为检测 项目的思维导图 数据分析与处理 声明所使用的库 `import numpy as np import pandas as pd #panda主要用于处理结构化的 ...

  5. matlab如何测两点的角度_【邢不行|量化小讲堂系列01-Python量化入门】如何快速上手使用Python进行金融数据分析...

    引言: 邢不行的系列帖子"量化小讲堂",通过实际案例教初学者使用python进行量化投资,了解行业研究方向,希望能对大家有帮助. [历史文章汇总]请点击此处 [必读文章]: [邢不 ...

  6. Python 数据分析三剑客之 Pandas(八):数据重塑、重复数据处理与数据替换

    CSDN 课程推荐:<迈向数据科学家:带你玩转Python数据分析>,讲师齐伟,苏州研途教育科技有限公司CTO,苏州大学应用统计专业硕士生指导委员会委员:已出版<跟老齐学Python ...

  7. python数据分析入门【二】 --- 数据处理

    python数据分析入门[二] - 数据处理 上一章内容python数据分析入门[一] - DataFrame & Series 下一章内容python数据分析入门[三] - 数据分析 文章目 ...

  8. Python在金融,数据分析,和人工智能中的应用

    Python最近取得这样的成功,而且未来似乎还会继续下去,这有许多原因.其中包括它的语法.Python开发人员可用的科学生态系统和数据分析库.易于和几乎所有其它技术集成,以及其开源地位.--来自Yve ...

  9. azw3 python数据分析 活用pandas库_Python数据分析 活用Pandas库 数据科学教程数据分析入门图书 Python编程入门数据处理...

    内容介绍 本书是Python数据分析入门书,每个概念都通过简单实例来阐述,便于读者理解与上手.具体内容包括:Python及Pandas基础知识,加载和查看数据集,Pandas的DataFrame对象和 ...

最新文章

  1. CES Asia专题|微鹅展示无线充电,智能手机的无线充电时代何时来临?
  2. 面试官:你说熟悉MySQL,那来谈谈InnoDB怎么解决幻读的?
  3. UWP入门(二) -- 基础笔记
  4. (Python)from collections import Counter统计包
  5. linux安装weblogic_WebLogic的Azure虚拟机主要版本发布
  6. 【华为云技术分享】干货分享丨jvm系列:dump文件深度分析
  7. 【SICP练习】123 练习3.54
  8. SSH框架整合截图总结(三)
  9. linux回到上次目录与历史命令查找快捷方式
  10. 五个Metro UI 风格的网页设计
  11. 区块链 Hyperledger fabric 排序服务Kafka
  12. 08.存储Cinder→5.场景学习→01.LVM Volume
  13. 银河麒麟支持php吗,银河麒麟操作系统下载
  14. Adobe flash professional CS5的序列号
  15. AcWing 187 导弹防御系统
  16. gitee免费部署静态网站
  17. 大牛的学习笔记:步进电机驱动在3D打印应用
  18. 菜鸟写jquery入门教程(for web前端开发群4)(03)
  19. 比较器(Comparable与Comparator接口)
  20. 怎么做到的?八个场景就能搞定智慧园区建设!

热门文章

  1. linux 调用 wine 程序,Wine官方版|Wine v3.8 Development在Linux下执行Windows应用程序 官方英文版 - 维维软件园...
  2. 期望、方差、协方差、协方差函数、期望函数、方差函数
  3. ktv无线服务器,KTV,酒店无线wifi上网无线AP服务器
  4. 利用Html,Css,javaScript简单写一个计算一天秒的倒计时
  5. vue生命周期钩子函数有哪些
  6. 用css/html实现搜索框 之一
  7. 一文带你了解Spring框架的基本使用
  8. kylin v10系统_银河麒麟桌面操作系统V10
  9. postgre数据库优缺点
  10. 多重奖励 | openGauss开源实习来啦!