Pandas的DataFrame基础操作巩固 股票数据处理-数据预处理

鳄鱼君

发表文章数:642

Vieu四代商业主题

高扩展、安全、稳定、响应式布局多功能模板。

¥69 现在购买
首页 » Python » Pandas的DataFrame基础操作巩固 股票数据处理-数据预处理

股票分析

1.使用tushare包获取某股票的历史行情数据

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

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

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

百度搜索tushare9http://www.tushare.org/,它可以为我们提供股票的历史数据,供我们分析。这里首先需要安装tushare,使用pip命令安装即可。接着导入相关模块

import pandas as pd
from pandas import DataFrame
import numpy as np
import tushare as ts

获取个股历史交易数据(包括均线数据)

df =ts.get_hist_data('600519',start='1900-01-01') #一次性获取全部日k线数据

获取数据之后将数据持久化存储:

df.to_csv('./k_code.csv')  #j将df中的数据持久化村粗 to_xxx进行df持久化存储

读取csv文件,加载到df中:

df=pd.read_csv('./k_code.csv')

数据比较多,我们删掉没有用的列(inplace为True表示直接在原数据中删):

df.drop(labels=['ma10','ma20','v_ma5','v_ma10','v_ma20','ma5'],axis=1,inplace=True) 
# 删除数据中无用的列 axis=1列,1行
	date	open	high	close	low	volume	price_change	p_change
————————————————————————————————————————————————————————————————————————————————————
0	2020-05-08	1317.00	1338.00	1314.61	1308.51	29078.68	2.61	0.20
1	2020-05-07	1299.40	1314.99	1312.00	1293.00	27934.74	12.00	0.92
2	2020-05-06	1251.00	1300.00	1300.00	1250.00	35834.81	34.30	2.71
3	2020-04-30	1271.00	1285.01	1265.70	1258.88	24660.87	-9.20	-0.72
4	2020-04-29	1277.80	1288.10	1274.90	1258.00	23444.06	-4.23	-0.33
...	...	...	...	...	...	...	...	...

查看数据列的类型(在数据分析中,object表示字符串),也就是data为zi

df.info() 
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 607 entries, 0 to 606
Data columns (total 8 columns):
 #   Column        Non-Null Count  Dtype  
---  ------        --------------  -----  
 0   date          607 non-null    object 
 1   open          607 non-null    float64
 2   high          607 non-null    float64
 3   close         607 non-null    float64
 4   low           607 non-null    float64
 5   volume        607 non-null    float64
 6   price_change  607 non-null    float64
 7   p_change      607 non-null    float64
dtypes: float64(7), object(1)
memory usage: 38.1+ KB

将data列的数据类型转换为时间序列类型:

df['date']=pd.to_datetime(df['date']) # 将date列转换为时间序列
df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 607 entries, 0 to 606
Data columns (total 8 columns):
 #   Column        Non-Null Count  Dtype         
---  ------        --------------  -----         
 0   date          607 non-null    datetime64[ns]
 1   open          607 non-null    float64       
 2   high          607 non-null    float64       
 3   close         607 non-null    float64       
 4   low           607 non-null    float64       
 5   volume        607 non-null    float64       
 6   price_change  607 non-null    float64       
 7   p_change      607 non-null    float64       
dtypes: datetime64[ns](1), float64(7)
memory usage: 38.1 KB

将date列作为原数据的行索引:

df.set_index(df['date'],inplace=True) # 设定行索引

                date	open	high	close	low	volume	price_change	p_change
date	
————————————————————————————————————————————————————————————————————————————————————————————							
2020-05-08	2020-05-08	1317.00	1338.00	1314.61	1308.51	29078.68	2.61	0.20
2020-05-07	2020-05-07	1299.40	1314.99	1312.00	1293.00	27934.74	12.00	0.92
2020-05-06	2020-05-06	1251.00	1300.00	1300.00	1250.00	35834.81	34.30	2.71
2020-04-30	2020-04-30	1271.00	1285.01	1265.70	1258.88	24660.87	-9.20	-0.72
2020-04-29	2020-04-29	1277.80	1288.10	1274.90	1258.00	23444.06	-4.23	-0.33
...	...	...	...	...	...	...	...	...

输出所有收盘(close)比开盘(open)上涨3%以上的日期

# (收盘-开盘)/开盘 >0.03
(df['close']-df['open'] )/df['open'] >0.03

以上代码会返回bool类型,True表示满足条件,False表示不满足条件。我们需要获取的是True的日期。经验:在数据分析中,一旦产生了布尔值,下一步可以将布尔值作为源数据的行索引,就可以取出True对应的行数据。

( df['close'] - df['open'] ) / df['open'] >0.03
df.loc[( df['close'] - df['open'] ) / df['open'] >0.03]  # true对应的行数据就是满足要求的行数据

#将满足要求的行数据的行索引获取
df.loc[( df['close'] - df['open'] ) / df['open'] >0.03].index

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

# (开盘-前日收盘)/前日收盘 <-0.02
(df['open']-df['close'].shift(1)) / df['close'] < -0.02

# 取出True对应的行数据
df.loc[(df['open']-df['close'].shift(1)) / df['close'] < -0.02]
df.loc[(df['open']-df['close'].shift(1)) / df['close'] < -0.02].index

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

分析:

数据从2018年切到昨天(df[‘2018′:’2020’])

买股票的单价使用开盘价,一年需要买入12次股票(1200只股票)

卖股票,一年需要卖出1次股票(1200只股票)

2020年不是完整一年,该年还没有到最后一个交易日,2020年只可以买入股票无法卖出。最后计算总收益,需要将手里剩余股票的实际价值计算到总收益中。

未经允许不得转载:作者:鳄鱼君, 转载或复制请以 超链接形式 并注明出处 鳄鱼君
原文地址:《Pandas的DataFrame基础操作巩固 股票数据处理-数据预处理》 发布于2020-05-11

分享到:
赞(0) 赏杯咖啡

评论 抢沙发

1 + 2 =


文章对你有帮助可赏作者一杯咖啡

支付宝扫一扫打赏

微信扫一扫打赏

Vieu4.6主题
专业打造轻量级个人企业风格博客主题!专注于前端开发,全站响应式布局自适应模板。
切换注册

登录

忘记密码 ?

您也可以使用第三方帐号快捷登录

Q Q 登 录
微 博 登 录
切换登录

注册