首页 > 其他 > 详细

处理丢失数据

时间:2019-05-27 00:02:46      阅读:248      评论:0      收藏:0      [点我收藏+]

一 . 简单的股票分析

使用tushare包获取某股票历史行情数据
输出该股票所有收盘比开盘上涨3%以上的日期
输出该股票所有开盘比前日收盘跌幅超过2%的日期
假如我从2010年1.1日开始,每月第一个交易日买入1手股票,每年最后一个交易日卖出所有的股票,到今天为止,我的收益如何

  导包

import pandas
from pandas import Series,DataFrame
import numpy as np
import tushare

  可以去帮助文档看tushare的用法

df_tushare = tushare.get_k_data(code=600519,start=2000-01-01)   # code是股票代码,start是起始日期,写的早于上市时间,就按上市时间开始

  把数据写到文件里

# 写入数据
df_tushare.to_csv(./maotai.csv)

  

# 将data列的数据转成时间序列,然后将改列作为整个数据的行索引
data = pandas.read_csv(./maotai.csv,index_col=date,parse_dates=[date])
data.drop(labels=Unnamed: 0,axis=1,inplace=True)  # 关于drop的方法,axis=1代表列,0代表行,inplace=True,代表在原数据上修改

  输出该股票所有收盘比开盘上涨3%以上的日期

# 输出该股票所有收盘比开盘上涨3%的日期
# (收盘-开盘)/开盘 > 0.03
indexs = (data[close]-data[open])/data[open] > 0.03  # 返回的是布尔值,满足条件是True
data.loc[indexs].index   # 中括号里面可以写布尔值

  让数据向后推一个

data[close].head().shift(1)

  输出该股票所有开盘比前日收盘跌幅超过2%的日期

indexs = (data[open] - data[close].shift(1))/data[close].shift(1)< -0.02
data.loc[indexs].index

  假如我从2010年1.1日开始,每月第一个交易日买入1手股票,每年最后一个交易日卖出所有的股票,到今天为止,我的收益如何

new_data = data[2010-01:2019]   # 切片可以只切年,也可以切到月,日

# 找出每一年的第一个交易日对应的行数据(数据的重新取样)
df_month_first = new_data.resample(M).first()     # M代表月份  日期是最后一天,但是数据是第一天的数据

# 获取每年的最后一次开盘价
df_year_last = new_data.resample(Y).last()
df_year_last[:-1]

# 然后自己算就OK啦

二 . 处理丢失数据

  两种丢失数据

    1. None

    2. num.nan(NaN)

import numpy
import pandas
from pandas import Series,DataFrame

  numpy.nan(NaN)是浮点型,能参与计算,但是计算结果是NaN

  pandas中的None和NaN

  pandas中None与numpy.nan都视作numpy.nan

  创建DataFrame

df = DataFrame(data=numpy.random.randint(0,100,size=(10,12)))

# 将某些数组元素复制为nan
df.iloc[1,1] = None
df.iloc[5,6] = None
df.iloc[3,5] = None
df.iloc[4,4] = None
df.iloc[2,8] = numpy.nan

# 将NaN对应的行删除
# 1.进行空值检测
df.isnull()
df.isnull().any(axis=1)   # isnull 和 any一起用  True证明有空值
df.notnull().all(axis=1)  # notnull 和 all一起用   False证明有空值

过滤函数
df.dropna() 由于是与drop相关的函数,所以axis=0代表行
df.dropna(axis=0)   # 删除NaN所在的行

填充函数  df.fillna() 返回的是DateFrame,可以继续调用fillna
df.fillna(method=bfill,axis=0)  # 这里的axis=0是列 ,按照前边的值填充
df.fillna(method=ffill,axis=1)  # 按照 行 后边的值填充

# 如果一列里连着多个NaN,这时候就需要用行填充

 

处理丢失数据

原文:https://www.cnblogs.com/attila/p/10928289.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!