Excel表格非常强大,Python可以让我们的重复性表格工作一劳永逸。而且,在人工智能的机器学习模型的建立中,我们需要用Excel帮我们进行数据分析统计,我们需要把Python处理得到的数据写入excel进行数据分析。
前一段时间,我需要查找表格1中的所有的数据是否存在表格2中,所以我就思考能不能用编程实现呢?以后遇到类似的时间,改改数值就可以一键操作了。
比如,下查右图大表的1班的考生是不是都存在左图的小表里面(右图大表里有初一年级所有的班级,左图的小表是1班所有学生)
左图是小表,右图是大表
软件:Pycharm
1.导入库
我们需要在Python中操作excel表格,所以第一步,需要导入处理excel的库。我们用openpyxl,它是个读写 Excel 2010 xlsx/xlsm/xltx/xltm 的 Python 库,简单易用,功能广泛,单元格格式/图片/表格/公式/筛选/批注/文件保护等等功能应有尽有,图表功能是其一大亮点。
import openpyxl
2.获取Excel文件
我的表格“原表.xlsx”,这里的路径为绝对路径
book = openpyxl.load_workbook('I:/workspace/对照查找/原表.xlsx')#原表
3.获得Excel文件的所有工作表
names = book.sheetnames
4.同样获得对照表的excel文件和所有的工作表
book_new = openpyxl.load_workbook('I:/workspace/对照查找/小表.xlsx')
names_new = book_new.sheetnames
5.找到工作表的第一个工作簿,从0开始算
sheetB = book[names[0]] #sheet1
6.获得第一个工作簿的“C”列所有数据
sheetB_c= sheetB["B"] #学号,指定学号作为唯一索引
因为,我们要根据两个表格的相同索引进行查找,所以同理得到对照表的第一个工作簿的C列所有数据。
sheetA = book_new[names_new[0]]
sheetA_c= sheetA["A"] #学号,查找索引
7.设置初始值
"""
B表(原表),index2
A表(新表),index1
"""
indexB = 1 #循环索引值
indexA = 1
endline_B = 1423 #结束行
endline_A = 56
8.查找过程
使用暴力枚举法:双重循环,外层循环控制大表,内存循环控制小表。从大表indexB的第1行开始循环,查找小表indexA的第1行~第56行,如果遇到相同数据,把此单元格填充颜色,跳出循环;大表循环进入第二行,重复次过程。这种方法虽然运算量大,但是写起来比较简单。
for c_name in sheetB_c: #原表,要被替换的表
if str(c_name.value) is None or indexB > endline_B: #如果没有数据,退出
break
indexA = 1
for c_name1 in sheetA_c:
value1 = str(c_name1.value)
if value1 is None or indexA > endline_A: # 如果没有数据,退出
break
if value1 == str(c_name.value):
sheetB["B" + str(indexB)].value = sheetA["A"+ str(indexA)].value
sheetB["C" + str(indexB)].fill = fille1 #填充颜色
break
indexA+=1
indexB += 1
9.全部查找完成,再把修改的颜色值保存到大表里面,修改数据
book.save('I:/workspace/替换/原表.xlsx')#原表
大家如果有什么好的思路,敬请指教~