excel表格_excel函数公式大全_execl从入门到精通
零基础学习python GUI编程(PyQt)系列之6:用pandas操作excel2024-05-08 18:22:13
通过前面的介绍,我们已经了解了对两个文本文件如何进行比较,今天我们将其换成excel表格文件,对excel文件中的学生成绩进行排名。
我们都知道,如果直接使用excel表格中的公式对学生的总成绩进行排名的话使用的是RANK公式,例如在相应的表格文件中输入"=RANK(E2,$E$2:$E$1000)“就可以对E列的第二行到第1000行的数据进行排名了。今天我们就借助python来对excel的数据进行排名,具体操作如下:
首先,我们需要进入Qt Designer新增一个按钮来承载该功能(如何配置及其使用Qt Designer前面章节有介绍),将该承载按钮的对象名修改为Rank,保存该修改。如下图。
新增排名计算按钮然后,进入pycharm中将该.ui文件重新生成.py文件,具体操作前面有介绍,如下图所示:
将Rank.ui生成Rank.py于是我们可以看到,在新生成的.py文件中包含了新增按钮的信息,如下图所示:
生成的Rank.py代码中的部分内容接着,我们将对应的按钮信息关联到初始化函数中,并将按钮关联到对应的功能函数(Rank),这样讲函数功能补充完整后就可以实现对应功能了!如下图所示(在python中,使用pandas既可以按索引对数据表进行排序,也可以看制定列的数值进行排序,对索引进行排序使用的是sort_index函数,而对指定行货列进行排序则是使用sort_values函数)。
使用的函数为sort_values。
:
排名按键与函数相连接排名对应代码如下(由于网页显示的问题,代码缩进需要自己调整):
def rank(file1_name):if file1_name == "": print('Current file can not be empty:file1_name path is :{0},file2_name path is:{1} .'.format(file1_name)) sys.exit() file1_name = file1_name.textEdit.toPlainText() file1_number = len(re.findall(r'(?=.xl)', file1_name)) if file1_number >= 2: #编辑框支持拖拽,当拖入文件超过两个的时候以第一个文件作为标准,并给出提示 win32api.MessageBox(0, "File1 should only select one file to compare , you selected more than one files ," " we will use the first file as the compare file", "The file opened error", win32con.MB_OK) file1_name = file1_name.split("file:///") print(file1_name[1]) file1_name = file1_name[1] if file1_name.startswith("file:///"): file1_name = file1_name.replace("file:///", "") #去掉拖拽时多余的字符串,使得程序能够识别到文件路径 else: file1_name = file1_name print("file1_name={}".format(file1_name)) rank_file = xlrd.open_workbook(file1_name) sheet_name = rank_file.sheet_names() rank_sheet = rank_file.sheet_by_name(sheet_name[0]) print("当前进行排名的单元格为:{}".format(sheet_name)) # result_rank = xlwt.Workbook() # 创建一个文件用来存放比较结果 # comp_rank = result_rank.add_sheet("最终排名结果", cell_overwrite_ok=True) # ncols = rank_sheet.ncols # nrows = rank_sheet.nrows # comp_rank.write(0,9)=="总分排名" # for row in range(1,nrows): # comp_rank.write(0, 10) == "总分排名" # comp_rank.write(row,10,'=RANK(row,$J$1:$J$100)') # result_rank.save("排名结果.xls") rank_file = pd.DataFrame(pd.read_excel(file1_name)) #使用pandas读取excel恩建 rank_file.sort_values(by=['总分','英语'],ascending=False,inplace=True,na_position='last') #对指定列进行排名 rank_file.rank(method='dense') rank_file.to_excel('排名结果.xlsx', sheet_name='最终排名') #保存排名结果
程序写好号,运行结果是以图如下:
代码运行后的效果图排名后的文件的部分结果,如下图:
运行结果通过运行后得到的结果可知,我们大体上对学生的成绩进行了排名,但是存在一个问题,就是成绩相同的学生的位次没有按照我们预想的结果将其排在同一位,该问题我们将会在后续的解说中进行优化,使得其符合我们预期。
以上就是本节为大家分享的内容,如果有不清楚的欢迎大家留言提出来,看看有没有必要通过视屏来讲解对应的内容!
如果觉得喜欢相应的内容,欢迎点赞关注,祝各位读者生活愉快
标签: readcell读取excel