一 . 简单的股票分析
使用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,这时候就需要用行填充