自制炒股盯盘神器——python实现(2)

   炒股盯盘很累?想自动获取每日某股票的交易信息?想实时监控某只股票?本文“自制炒股盯盘神器”帮你实现!在第一节笔者总结了如何获取某只股票的基本信息的问题,本文简单记录如何处理获取到的股票信息······

  1. 模块介绍
       在上一节的文章安装tushare库的时候,笔者简单提到过pandas.py库,本次实验就是以此库为主讲解。事实上,我们不妨做一下类比:pandas库是处理二维表格的强大工具,就好像Windows上的Excel软件一样。如果选择上一节的选择用pip安装tushare库,那么pandas库也会自动安装上,所以这里就不再讲该库的安装了,如果大家有疑惑,可以点击上面的链接简单浏览一下。
       pandas库支持两种数据结构:Series和DataFrame。前者属于一维数据,后者属于二维数据。我们只讲后者,因为tushare函数获取到的股票信息是以后者的形式保存在变量中的,即:运行下面的代码,可以看出爬取到的指数数据是以<class 'pandas.core.frame.DataFrame'>的数据类型保存的,这也是我们着重讲后者的原因之一。
import tushare as ts
import pandas as pd

pd.set_option('display.max_columns',None) 
idx = ts.get_index()
print(type(idx))
  1. 函数或类方法介绍
       下面就总结DataFrame数据的一些基本操作,
  • 索引
       DataFrame数据的索引方式主要有三种,即行索引、列索引和块索引(块索引就是从整个二维表中切出连续的一块)。下面代码举例:
import tushare as ts
import pandas as pd

df = ts.get_index() # 获取指数信息

pd.set_option('display.max_columns',None) #打印出所有列
block = df[['name','change']][8:10] #块索引,获取df的name、change列,第8、9行注意python前闭后开
row = df[0:1] #获取第0行,单行
rows = df[0:2] # 获取0、1行
col = df['name'] #获取单列
cols = df[['name','change']] #获取多列

#打印出结果
print(block)
print(row)
print(rows)
print(col)
print(cols)

结果请大家自行验证。

  • 增删行列
       为了不误导大家的投资,笔者仅以上证50指数为例,说明技术上如何实现。代码如下:
import tushare as ts
import pandas as pd
import datetime as dt #用于获取时间日期

df = ts.get_index() #获取指数数据和时间、日期
date = dt.datetime.now().strftime("%F")
time = dt.datetime.now().strftime("%T")

sf = df[['name','change']][8:9] #截取第8行数据中的指数名字和涨幅,上证50
zf = df[['name','change']][9:10] #截取第9行数据中的指数名字和涨幅,新综指

print(sf) #打印出原始的1*2的二维表

sf['date'] = date #添加新列给上证50
sf['time'] = time

date = dt.datetime.now().strftime("%F")
time = dt.datetime.now().strftime("%T")
zf['date'] = date  #添加新列给新综指
zf['time'] = time

add_row = sf.append(zf) #增加新行,赋给新的变量

print(sf) #打印出添加新列后的1*4二维表
print(add_row) #打印出添加新行后的2*4的二维表

打印结果如下:

打印出的原始的二维表:
   name  change
8  上证50   -3.19

打印出增加新列的二维表:
   name  change        date      time
8  上证50   -3.19  2020-03-09  13:09:51

打印出增加新列新行后的二维表:
   name  change        date      time
8  上证50   -3.19  2020-03-09  13:09:51
9   新综指   -2.81  2020-03-09  13:09:51

删除数据:

import tushare as ts
import pandas as pd

df = ts.get_index() #得到一个4*4的二维表
sf = df[['name','change','low','volume']][8:12]
print(sf) #打印出原始数据

del_col = sf.drop(columns = 'low') #删除列
del_rows = sf.drop(index = [8,9]) #删除两行
#打印验证
print(del_col)
print(del_rows)

输出结果如下:

原始数据:
     name  change        low     volume
8    上证50   -2.72  2864.4901   47543862
9     新综指   -2.20  2484.7830  332513300
10  沪深300   -2.63  3995.1313  168434370
11  中证500   -2.82  5539.9380  176281637

删除单列后:
     name  change     volume
8    上证50   -2.72   47543862
9     新综指   -2.20  332513300
10  沪深300   -2.63  168434370
11  中证500   -2.82  176281637

删除两行后:
     name  change        low     volume
10  沪深300   -2.63  3995.1313  168434370
11  中证500   -2.82  5539.9380  176281637
  • 按条件查找数据
       当我们获取的股票数据较多时,我们可能只关心其中有效的数据,比如说涨幅超过某一值的股票信息,这里也举一个例子:
import tushare as ts
import pandas as pd
df = ts.get_index()
sf = df[['name','change','low','volume']][8:12] #获取块索引
print(sf)
find_data = sf[sf['change'] < -2.5] #查找涨幅小于-2.5的指数
print(find_data)

运行结果如下:

     name  change        low     volume
8    上证50   -2.59  2864.4901   49637805
9     新综指   -2.12  2484.7830  343575044
10  沪深300   -2.52  3995.1313  174628404
11  中证500   -2.74  5539.9380  181627678
筛选后的数据:
     name  change        low     volume
8    上证50   -2.59  2864.4901   49637805
10  沪深300   -2.52  3995.1313  174628404
11  中证500   -2.74  5539.9380  181627678
  • 文件写入与读取
       DataFrame数据对应Excel和.csv格式中的二维表格,以excel表为例简单介绍:
#写入:
new.to_excel('SSI.xlsx',index = False)

上面index = false是指不写入索引号,默认写入索引号。

#读取:
rd = pd.read_excel('SSI.xlsx',sheet_name = 0,encoding = 'utf-8')
print(rd)

上面“SSI,xlsx”表示文档名字,sheet_name表示该文档中的第一张表,第三个参数是编码标准,为了支持中文数据。

  • 数据表的拼接
        相关的函数有三个,即merge()、concat()、append()。下面分别示例:
import tushare as ts
import pandas as pd
import datetime as dt
import numpy as np
#生成两个表格
a = pd.DataFrame(np.arange(1,9).reshape(2,4),columns = ['name','change','date','time'])
print(a)
b = pd.DataFrame(np.arange(11,19).reshape(2,4),columns = ['name','change','date','time'])
print(b)
#拼接数据表
'''
c = pd.merge(a,b)
c = pd.concat([a,b])
'''
c = b.append(a)
print(c) #打印结果

上面注释掉的两句均可替换未注释的那一句且效果完全一样。
3. 总结
   上面总结的二维表的操作中,基本上后面处理股票信息时我们都要用到。比如说索引、增删、查找是为了筛选出我们感兴趣的信息。读取/写入文件是为了保存数据,以便以后参考这些数据对后续的投资做出调整。
   既然是盯盘神器,那么怎么让它帮助我们自动盯住自己感兴趣的股票或者指数呢?如果某只股票发生了较大的变化,怎么让它提醒我们呢?下一节就解决这样的问题,敬请期待!如果大家感兴趣,可以关注公众号“24K纯学渣”,更多文章第一时间将在该公众号更新。欢迎大家学习交流,上述如有不妥或纰漏之处也非常欢迎大家评论指出!

发布了25 篇原创文章 · 获赞 9 · 访问量 6188

猜你喜欢

转载自blog.csdn.net/qq_42144047/article/details/104743100