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')#原表

大家如果有什么好的思路,敬请指教~

声明:本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。