功能需求
1.程序启动后,给用户提供查询接口,允许用户重复查股票行情信息(用到循环)
2.允许用户通过模糊查询股票名,比如输入“生物”,就把所有股票名称中包含“生物”的所有股票的信息打印出来
3.允许按'收盘价','涨跌幅','龙虎榜净买额','龙虎榜买入额','龙虎榜卖出额','龙虎榜成交额','市场总成交额','净买额占总成交比','成交额占总成交比','换手率','流通市值'等条件来筛选信息,比如输入“收盘价>20”,则把收盘价大于50的所有股票的信息都打印出来。
目录
功能需求
1.获取股票数据集
2.构建查询小程序
2.1 根据股票名称进行精确或模糊查询
2.2 根据变量数值进行简单条件查询
2.2.1 代码步骤分解
2.2.2 条件查询的代码整合
2.2.3 代码试错演示
1.获取股票数据集
通过akshare数据库搜集龙虎榜详情数据并将结果另存为csv文件保存
import akshare as akstock_lhb_detail_em_df=ak.stock_lhb_detail_em()# 东方财富网-数据中心-龙虎榜单-龙虎榜详情stock_lhb_detail_em_df.head()stock_lhb_detail_em_df.to_csv('Statistics/stock_lhb_detail_em_df.csv')
构建查询数据集
import pandas as pd
lhb_df=pd.read_csv('Statistics/stock_lhb_detail_em_df.csv',encoding="utf-8")
lhb_df.head()
将数据转换为字典,定义索引并转置
stock_dict=stock_lhb_detail_em_df.set_index("名称").T.to_dict("list")
2.构建查询小程序
2.1 根据股票名称进行精确或模糊查询
while True:cmd=input("请输入要查询的股票名称,输入“退出”结束")for stock_name,stock_data in stock_dict.items():if cmd in stock_name:print(stock_name,stock_data)if cmd=="退出":break
2.2 根据变量数值进行简单条件查询
2.2.1 代码步骤分解
查看所有变量列名
headers=list(stock_lhb_detail_em_df.columns)
headers
输入查询条件
cmd=input("请输入要查询的股票列名及条件")
第1步,检查格式是否合法
import re
if '>' not in cmd and '<' not in cmd:print("您的输入中未包含<或>,请重新输入!")
else:cmd_parser=re.split("[<>]",cmd)#re.split()以列表形式返回分割的字符串。分割符是<或>,获得分隔后的listcmd_parserif len(cmd_parser) !=2:print("格式不合法,请检查后重新输入!")else:print("格式合法,可继续")filter_column,filter_val=cmd_parser
第2步,格式合法后检查列名是否合法
if filter_column in ['收盘价','涨跌幅','龙虎榜净买额','龙虎榜买入额','龙虎榜卖出额','龙虎榜成交额','市场总成交额','净买额占总成交比','成交额占总成交比','换手率','流通市值']:print("列名合法,可继续")
else:print('------------------------')print("出错了!!!\n您输入的列名不合法,请核对后重新输入!")print('------------------------')
第3步,格式、列名都合法后再检查数值是否合法
try:filter_val=float(filter_val)print('数值合法,可继续')#打印顺利运行提示信息print('索引名为:%s'%(filter_column))print('条件为:%s'%(cmd[len(cmd_parser[0])]))print('条件数值为:%s'%(filter_val))
except:print('数值不合法,请重新输入') # 处理异常方式:打印错误提示信息
第4步,格式、列名、数值都合法后再进行股票数据查找
column_index=headers.index(filter_column)
print(column_index)#打印索引的数字,输出结果应为4,因为“收盘价”是所有索引中的第5个for s_id,s_data in stock_dict.items():#返回之前定义的字典,分别定义索引和数值if str(cmd[len(cmd_parser[0])])=='>':if float(s_data[column_index])>float(filter_val):print(s_id,s_data)else:if float(s_data[column_index])<float(filter_val):print(s_id,s_data)
2.2.2 条件查询的代码整合
import rewhile True:cmd=input("请输入要查询的股票列名及条件,输入“退出”结束查询")#定义退出查询条件if cmd=="退出":print("已退出查询!")break #第1步,检查格式是否合法if '>' not in cmd and '<' not in cmd:print('------------------------')print('出错了!!!\n您的输入中未包含<或>,请重新输入!')print('------------------------')else:if len(cmd_parser) !=2:print('------------------------')print("出错了!!!\n格式不合法,请检查后重新输入!")print('------------------------')else:cmd_parser=re.split("[<>]",cmd)#re.split()以列表形式返回分割的字符串。分割符是<或>,获得分隔后的listfilter_column,filter_val=cmd_parser#第2步,格式合法后再检查列名是否合法if filter_column in ['收盘价','涨跌幅','龙虎榜净买额','龙虎榜买入额','龙虎榜卖出额','龙虎榜成交额','市场总成交额','净买额占总成交比','成交额占总成交比','换手率','流通市值']:#第3步,格式、列名都合法后再检查数值是否合法try:filter_val=float(filter_val)print('索引名为:%s'%(filter_column))print('索引条件为:%s'%(cmd[len(cmd_parser[0])]))print('条件数值为:%s'%(filter_val))print('------------------------')print('检索结果如下:')print('------------------------')#第4步,格式、列名、数值都合法后再进行股票数据查找column_index=headers.index(filter_column)for s_id,s_data in stock_dict.items():#返回之前定义的字典,分别定义索引和数值if str(cmd[len(cmd_parser[0])])=='>':if float(s_data[column_index])>float(filter_val):print(s_id,s_data)else:if float(s_data[column_index])<float(filter_val):print(s_id,s_data)except:print('------------------------')print('出错了!!!\n数值不合法,请重新输入')#处理异常方式:打印错误提示信息print('------------------------')else:print('------------------------')print("出错了!!!\n您输入的列名不合法,请核对后重新输入!")print('------------------------')
2.2.3 代码试错演示: