(五十一)根据指定列数据降序排列工作表

# 导入openpyxl模块
import openpyxl
# 根据“录取表.xlsx”文件内容,并打开工作簿
mybook = openpyxl.load_workbook("录取表.xlsx", data_only=True)
mysheet = mybook['录取表']
# 按行获取录取表(mysheet)的单元格数据(myrange)
myrange=list(mysheet.values)
#根据录取表(mysheet)创建(复制)新录取表(mynewsheet)
mynewsheet = mybook.copy_worksheet(mysheet)
mynewsheet.title = '新录取表'
#删除新录取表(mynewsheet)第3行之后的行(即删除所有考生)
while mynewsheet.max_row>3:mynewsheet.delete_rows(4)
#从myrange第四行开始先根据总分列对行进行升序排序然后在循环,
for myrow in sorted(myrange[3:],key=lambda x:x[3],reverse=True):#在新录取表(mynewsheet)中添加经过降序排列后的考生mynewsheet.append(myrow)
# 保存工作簿,保存为"结果表-录取表.xlsx"文件
mybook.save("结果表-录取表.xlsx")

sorted(myrange[3:],key=lambda x:x[3],reverse=True)

表示对指定范围(myrange[3:])的所有行(从第四行开始)根据第四列(总分列)的数据进行降序排列,reverse=True表示降序,False表示升序,但默认升序

(五十二)根据字符串长度倒序排列工作表

# 导入openpyxl模块
import openpyxl
# 根据“新书订购表.xlsx”文件内容,并打开工作簿
mybook = openpyxl.load_workbook("新书订购表.xlsx", data_only=True)
mysheet = mybook['新书订购表']
# 按行获取新书订购表(mysheet)的单元格数据(第一行除外)
myrows=list(mysheet.values)[1:]
mylist=[]
for myrow in myrows:mylist+=[myrow[0]]
#根据书名的长度进行倒序排列
mylist.sort(key=len,reverse=True)
#mylist.sort(key=lambda x:len(x),reverse=True)
#在新书订购表(mysheet)中删除所有的行(第一行除外)
while mysheet.max_row>1:mysheet.delete_rows(2)
#在新书订购表(mysheet)中添加倒序排列的书名
for myrow in mylist:mysheet.append([myrow])
# 保存工作簿,保存为"结果表-新书订购表.xlsx"文件
mybook.save("结果表-新书订购表.xlsx")

mylist.sort(key=len,reverse=True)

表示根据 mylist 列表成员的字符串长度进行倒序排列

(五十三)使用集合实现随机排列工作表

# 导入openpyxl模块
import openpyxl
# 根据“员工表.xlsx”文件内容,并打开工作簿
mybook = openpyxl.load_workbook("员工表.xlsx",data_only=True)
mysheet = mybook.active
# 按行获取员工表(mysheet)的单元格数据(第一行除外)
myvalues=list(mysheet.values)[1:]
#根据myvalues创建myset集合,此时自动随机排列所有行
myset=set(myvalues)
#删除员工表(mysheet)的行(第一行除外)
while mysheet.max_row>1:mysheet.delete_rows(2)
#在员工表(mysheet)中添加经过随机排列的行(myset)
for myrow in myset:mysheet.append([myrow)
# 保存工作簿,保存为"结果表-员工表.xlsx"文件
mybook.save("结果表-员工表.xlsx")

myset=set(myvalues)

表示根据员工表的所有行创建集合在python中,集合是无序的、且不重复元素(成员),因此每次运行此代码时,在myset的成员的排列顺序均不相同

(五十四)根据间隔行数正序筛选所有行

# 导入openpyxl模块
import openpyxl
# 根据“员工表.xlsx”文件内容,并打开工作簿
mybook = openpyxl.load_workbook("员工表.xlsx",data_only=True)
mysheet = mybook.active
# 按行获取员工表(mysheet)的单元格数据(第一行除外)
myrows=list(mysheet.values)[1:]
#删除员工表(mysheet)的行(第一行除外)
while mysheet.max_row>1:mysheet.delete_rows(2)
#从myrows的第一行开始,根据间隔行数(1行)正序筛选所有行
for myrow in myrows[::2]:mysheet.append(myrow)
# 保存工作簿,保存为"结果表-员工表.xlsx"文件
mybook.save("结果表-员工表.xlsx")

myrows[::2]

表示从myrows的第一行开始,根据间隔行数(1行)正序筛选所有行。如果 myrows[::1]没有筛选效果。如果 myrows[::3] 表示从myrows的第一行开始,根据间隔行数(2行)正序筛选所有行

(五十五)根据间隔行数倒序筛选所有行

# 导入openpyxl模块
import openpyxl
# 根据“员工表.xlsx”文件内容,并打开工作簿
mybook = openpyxl.load_workbook("员工表.xlsx",data_only=True)
mysheet = mybook.active
# 按行获取员工表(mysheet)的单元格数据(第一行除外)
myrows=list(mysheet.values)[1:]
#删除员工表(mysheet)的行(第一行除外)
while mysheet.max_row>1:mysheet.delete_rows(2)
#从myrows的第一行开始,根据间隔行数(1行)正序筛选所有行
for myrow in myrows[::-2]:mysheet.append(myrow)
# 保存工作簿,保存为"结果表-员工表.xlsx"文件
mybook.save("结果表-员工表.xlsx")

myrows[::-2]

表示在myrows中从倒数第一行开始,根据间隔行数(1行)倒序筛选所有行。

如果 myrows[::-1] 仅有倒序排列结果,没有筛选效果

如果 myrows[::-3] 表示在myrows中从倒数第一行开始根据间隔行数(2行)倒序筛选所有行

(五十六)使用max()筛选最大值所在的行

# 导入openpyxl模块
import openpyxl
# 根据“新书表.xlsx”文件内容,并打开工作簿
mybook = openpyxl.load_workbook("新书表.xlsx",data_only=True)
mysheet = mybook.active
# 按行获取员工表(mysheet)的单元格数据(第一行除外)
myrows=list(mysheet.values)[1:]
mydict={}
for myrow in myrows:#根据每行(myrow)的书名(myrow[0])和售价(myrow[1])创建字典mydict[myrow[0]]=myrow[1]
#获取在字典(mydict)中售价(mydict.values())最高的图书
mymax=max(zip(mydict.values(),mydict.keys()))
mysheet.append(['【最高售价图书】'+mymax[1],mymax[0]])
# 保存工作簿,保存为"结果表-新书表.xlsx"文件
mybook.save("结果表-新书表.xlsx")

zip(mydict.values(),mydict.keys())

mydict.values() 表示 mydict 的所有键值,mydict.keys() 表示字典的所有键名,zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成元组,然后返回由这些元组组成的列表

max() 函数用于获取给定参数的最大值,参数可以是序列

(五十七)使用关键字筛选符合条件的行

# 导入openpyxl模块
import openpyxl# 根据“员工表.xlsx”文件内容,并打开工作簿
mybook = openpyxl.load_workbook("员工表.xlsx", data_only=True)
mysheet = mybook.active
# 由于每执行一次mysheet.delete_rows(myrow),
# mysheet.max_row会发生变化,因此采用倒循环
# mysheet.max_row表示起始行号,1表示结束行号,-1表示步长
for myrow in range(mysheet.max_row, 1, -1):if '江北县' not in mysheet[myrow][2].value:mysheet.delete_rows(myrow)
# 保存工作簿,保存为"结果表-员工表.xlsx"文件
mybook.save("结果表-员工表.xlsx")

(五十八)使用列表设置条件对行进行筛选

# 导入openpyxl模块
import openpyxl# 根据“销量排行表.xlsx”文件内容,并打开工作簿
mybook = openpyxl.load_workbook("销量排行表.xlsx", data_only=True)
mysheet = mybook.active
# 按行获取销量排行表(mysheet)的单元格数据(第一行除外)
myrows=list(mysheet.values)[1:]
#在销量排行表(mysheet)中删除所有行(第一行除外)
while mysheet.max_row>1:mysheet.delete_rows(2)
mylist=['清华出版社','北京出版社']
for myrow in myrows:#根据出版社名字(myrow[3])在mylist中if myrow[3] in mylist:mysheet.append(myrow)
# 保存工作簿,保存为"结果表-销量排行表.xlsx"文件
mybook.save("结果表-销量排行表.xlsx")

(五十九)使用或运算组合条件对行进行筛选

# 导入openpyxl模块
import openpyxl
# 根据“销量排行表.xlsx”文件内容,并打开工作簿
mybook = openpyxl.load_workbook("销量排行表.xlsx", data_only=True)
mysheet = mybook.active
# 按行获取销量排行表(mysheet)的单元格数据(第一行除外)
myrows=list(mysheet.values)[1:]
#在销量排行表(mysheet)中删除所有行(第一行除外)
while mysheet.max_row>1:mysheet.delete_rows(2)
mylist=['清华出版社','北京出版社']
for myrow in myrows:if myrow[2]>100 or '清华大学出版社' in myrow[3]:mysheet.append(myrow)
# 保存工作簿,保存为"结果表-销量排行表.xlsx"文件
mybook.save("结果表-销量排行表.xlsx")

(六十)使用与运算组合条件对行进行筛选

# 导入openpyxl模块
import openpyxl
# 根据“销量排行表.xlsx”文件内容,并打开工作簿
mybook = openpyxl.load_workbook("销量排行表.xlsx", data_only=True)
mysheet = mybook.active
# 按行获取销量排行表(mysheet)的单元格数据(第一行除外)
myrows = list(mysheet.values)[1:]
# 在销量排行表(mysheet)中删除所有行(第一行除外)
while mysheet.max_row > 1:mysheet.delete_rows(2)
for myrow in myrows:if myrow[2] > 100 and '清华大学出版社' in myrow[3]:mysheet.append(myrow)
# 保存工作簿,保存为"结果表-销量排行表.xlsx"文件
mybook.save("结果表-销量排行表.xlsx")

(六十一)使用集合对行进行随机筛选

# 导入openpyxl模块
import openpyxl
# 根据“员工表.xlsx”文件内容,并打开工作簿
mybook = openpyxl.load_workbook("员工表.xlsx", data_only=True)
mysheet = mybook.active
# 根据员工表(mysheet)的单元格数据(第一行除外)创建集合(myset)
myset = set(list(mysheet.values)[1:])
# 在员工表(mysheet)中删除所有行(第一行除外)
while mysheet.max_row > 1:mysheet.delete_rows(2)
#在员工表(mysheet)中随机筛选6行数据
for myrow in range(6):mysheet.append(myset.pop())
# 保存工作簿,保存为"结果表-员工表.xlsx"文件
mybook.save("结果表-员工表.xlsx")

myset.pop()

表示从 myset 集合中随机随机移除一个成员(移除是随机的)

(六十二)使用交集方法筛选多个工作表的行

# 导入openpyxl模块
import openpyxl
# 根据“运动员表.xlsx”文件内容,并打开工作簿
mybook = openpyxl.load_workbook("运动员表.xlsx", data_only=True)
mysheet1 = mybook['篮球赛']
mysheet2 = mybook['足球赛']
mysheet3 = mybook['乒乓球赛']
# 根据篮球赛工作表(mysheet1)的行(第一行除外)创建集合(myset1)
myset1 = set(list(mysheet1.values)[1:])
# 根据足球赛工作表(mysheet2)的行(第一行除外)创建集合(myset2)
myset2 = set(list(mysheet2.values)[1:])
# 根据篮球赛工作表(mysheet3)的行(第一行除外)创建集合(myset3)
myset3 = set(list(mysheet3.values)[1:])
# 获取三个集合的交集(myset4),即筛选参加三种比赛的运动员
myset4 = myset1.intersection(myset2, myset3)
# 根据交集(myset4)创建参加三种比赛的工作表(mysheet4)
mysheet4 = mybook.copy_worksheet(mysheet1)
mysheet4.title = '三种比赛'
while mysheet4.max_row > 1:mysheet4.delete_rows(2)
for myrow in myset4:mysheet4.append(myrow)
# 保存工作簿,保存为"结果表-运动员表.xlsx"文件
mybook.save("结果表-运动员表.xlsx")

myset1.intersection(myset2, myset3)

表示myset1、myset2、myset3三个集合的交集myset4。

可以在 intersection() 方法中添加多个参数,以实现获取多个集合的交集

(六十三)使用集合推导式对行进行筛选

# 导入openpyxl模块
import openpyxl
# 根据“城市排名表.xlsx”文件内容,并打开工作簿
mybook = openpyxl.load_workbook("城市排名表.xlsx", data_only=True)
mysheet = mybook.active
# 按行获取城市排名表(mysheet)的单元格数据(第一行除外)
myrows = list(mysheet.values)[1:]
#使用集合推导式在myrows中筛选包含‘广州’的行
myset={myrow for myrow in myrows if '广州' in myrow[1]}
#在城市排名表(mysheet)中删除所有行(第一行除外)
while mysheet.max_row > 1:mysheet.delete_rows(2)
#将筛选结果(myset)重新写入城市排名表(mysheet)
for myrow in myset:mysheet.append(myrow)
# 保存工作簿,保存为"结果表-城市排名表.xlsx"文件
mybook.save("结果表-城市排名表.xlsx")

myset={myrow for myrow in myrows if '广州' in myrow[1]}

表示循环列表(myrows)的每一行(myrow),如果该行( myrow )的城市列( myrow[1] )包含'广州',则将该行添加到新建的集合中

(六十四)使用集合在多行多列中筛选数据

# 导入openpyxl模块
import openpyxl
# 根据“五百强企业表.xlsx”文件内容,并打开工作簿
mybook = openpyxl.load_workbook("五百强企业表.xlsx", data_only=True)
mysheet = mybook['五百强企业表']
# 按行获取五百强企业表(mysheet)的单元格数据(第一行除外)
myrows = list(mysheet.values)[1:]
#创建空集合(myset)
myset=set()
#循环五百强企业表(mysheet)的行(myrow)
for myrow in myrows:#循环行(myrow)的公司名称(第一列单元格除外)for myname in myrow[1:]:#在集合myset中添加所有的公司名称(自动删除重复的公司)myset.add(myname)
#在工作簿(mybook)中创建新工作表
mynewsheet=mybook.create_sheet('所有公司表')
#将筛选结果(myset)重新写入城市排名表(mysheet)
for myname in myset:#在新工作表(mynewsheet)中添加不重复的公司名称(myname)mynewsheet.append([myname])
# 保存工作簿,保存为"结果表-五百强企业表.xlsx"文件
mybook.save("结果表-五百强企业表.xlsx")

myset.add(myname)

表示在myset集合中添加公司名称(myname),若在五百强公司企业表中存在相同的公司名称,则在myset中只保留一个

【python辅助excel】(6)相关推荐

  1. 【python辅助excel】(3)

    (二十一)将一个工作表拆分成多个工作表 # 导入openpyxl模块 import openpyxl# 读取"录取.xlsx"文件内容,并创建工作簿 mybook = openpy ...

  2. 用python处理excel数据的优势-python处理excel的优势是什么

    在我们工作中往往需要处理大量的数据,因此Excel在我们工作中是一个必不可少的工具,不过,近期很多人开始用Python处理数据,那 么,大家为什么开始用Python了呢?Python辅助处理excel ...

  3. python处理数据的优势-python处理excel的优势是什么

    在我们工作中往往需要处理大量的数据,因此Excel在我们工作中是一个必不可少的工具,不过,近期很多人开始用Python处理数据,那 么,大家为什么开始用Python了呢?Python辅助处理excel ...

  4. python处理数据的优势-Python处理excel的优点

    在我们工作中往往需要处理大量的数据,因此Excel在我们工作中是一个必不可少的工具,不过,近期很多人开始用Python处理数据,那么,大家为什么开始用Python了呢?Python辅助处理excel的 ...

  5. python处理excel的优势-SAS、R、SPSS、python、excel五大软件的比较优势分析

    SAS.R.SPSS.python.excel五大软件的比较优势分析 一.SAS软件 SAS是全球最大的软件公司之一,是由美国NORTH CAROLINA州立大学1966年开发的统计分析软件.SAS把 ...

  6. 【Python自动化Excel】pandas处理Excel的拆分、合并

    话说Excel数据表,分久必合.合久必分.Excel数据表的"分"与"合"是日常办公中常见的操作.手动操作并不困难,但数据量大了之后,重复性操作往往会令人崩溃. ...

  7. 辅助 Excel 的数据计算 add-ins

    Excel 中遇到较复杂的运算,数据分析师常会用 add-ins 辅助解决.本文考察了一些常见的 add-ins,从部署难度.开发难度.流畅程度等方面进行深度对比,并着重考察了数据计算能力,esPro ...

  8. 五大数据分析软件对比:Python、Excel、R、SPSS、SAS

    本文转载自:中国统计网 1 Excel Microsoft Excel是微软公司的办公软件Microsoft office的组件之一,是由Microsoft为Windows和Apple Macinto ...

  9. 用python实现excel 14个常用操作,用Python 操作 Excel,这篇文章别错过了!(超全总结)...

    在之前的办公自动化系列文章中,我已经对Python操作Excel的几个常用库openpyxl.xlrd/xlwt.xlwings.xlsxwriter等进行了详细的讲解. 为了进一步带大家了解各个库的 ...

最新文章

  1. AJAX范例大搜罗(转载)
  2. 马斯克再发声,称人工智能是人类文明面临的最大风险
  3. HDU 5527:Too Rich(DFS+贪心)***
  4. linux 产生0~100内的随机数
  5. Oracle数据库表信息,序列,视图等导出,导入。(数据库备份和恢复)
  6. MySQL数据库添加一个字段
  7. KYOCERA Programming Contest 2021(AtCoder Beginner Contest 200)题解
  8. MongoDB投影字段
  9. THINKPHP中使用swoole
  10. Mysql学习总结(18)——Mysql主从架构的复制原理及配置详解
  11. 二十一天学通C语言:C语言中指针排序
  12. JavaScript—计算图片加载的张数。
  13. matlab求解指派问题最优解的函数
  14. 支持向量回归预测怎么做_使用支持向量回归进行Facebook股票预测
  15. switch组件使用 v-slot 使用,作用域插槽
  16. 用计算机计算圆的面积,周长直径换算器在线(圆的面积在线计算器)
  17. http 304响应的理解
  18. 基于EasyDarwin开源流媒体服务器框架实现EasyNVR H5无插件直播流媒体服务器方案
  19. leetcode2021年度刷题分类型总结(十)哈希表 (python)
  20. java计算机毕业设计钢材出入库管理系统MyBatis+系统+LW文档+源码+调试部署

热门文章

  1. CompletableFuture之灭霸的故事
  2. htc vive漂亮的激光线效果
  3. 农信社c语言考试题库,农村信用社最新计算机专业考试题
  4. c语言 右移位什么情况补1,关于移位操作,该如何处理
  5. python中空格的代码_python 空格
  6. serverless是什么?无服务器之serverless
  7. 大型分布式电商系统架构是如何从 0 开始演进的?
  8. 经销商文件电子签约平台:用印简单,供货更快
  9. 【APP】App测试方法总结
  10. jQuery模态对话框示例