首页 > 编程知识 正文

利用python处理excel数据,如何使用python处理excel的数据

时间:2023-05-05 06:03:40 阅读:252935 作者:2248

Python进行Excel数据处理 思路实现1. 使用openpyxl2. 使用xlrd和xlwt 总结

前两天GF让用Python写个Excel表格处理脚本,在这里记录一下。某公司有个数据统计汇总表格,仅为初表,复制粘贴汇总而来。初表中,存在同一员工推荐多套商品以及各自金额,目标呢:合并同类项,并把推荐数量和金额进行累加。文字解释不太清楚,上图说话。
原始图片 original

目标图片 final

思路

Step 1: 涉及excel文件的读写,在此使用openpyxl或者xlrd和xlwt组合,需要了解其中的方法和单元格操作。
Step 2: 需要进行人名和推荐数量配对,以及累计金额的累加,在此使用字典数据类型。此外由于存在推荐多套的情况,在此需要进行一键对多值的映射,对于字典中值的初始化,使用列表方便改变数量。
Step 3:在“累计认购金额”条目,需要注意单元格内的内容格式是数字类型还是文本类型,如果是数字类型,可以使用sum函数累加,如果是文本类型,需要使用int函数转化为数值在累加,也可使用map函数进行字符到数字的映射。

实现 1. 使用openpyxl # By WDL 2020-3-31from openpyxl import Workbook, load_workbookwb= load_workbook("XXX公司推荐成交明细.xlsx")ws=wb["Sheet1"]#也可以使用wb.get_sheet_by_name("Sheet1") 获取工作表# 读取数据,把excel中的一个table按行读取出来,存入一个二维的listtotal_list=[]for row in ws.rows: row_list=[] for cell in row: row_list.append(cell.value) total_list.append(row_list)# 利用字典进行数据统计namedict={}valuedict={}for term in total_list: if term[1] == None or term[1] == "员工姓名":# 员工姓名列 continue else: namedict[term[1]]=namedict.get(term[1],0)+1 valuedict.setdefault(term[1],[]).append(term[-1]) #一键 对多值的字典#保存写操作newwb = Workbook()newsheet=newwb.activenewsheet.title="Sheet1"#表头newsheet["A1"]=total_list[0][0]newsheet.merge_cells("A1:C1") #合并单元格newsheet["A2"]="员工姓名"newsheet["B2"]="推荐数量"newsheet["C2"]="累计认购金额"#单元格i=3for name in namedict: newsheet.cell(row=i,column=1).value=name newsheet.cell(row=i, column=2).value=namedict[name] newsheet.cell(row=i, column=3).value =sum(valuedict[name]) i=i+1newwb.save("XXX公司推荐成交明细_final.xlsx") 2. 使用xlrd和xlwt # By WDL 2020-3-31import xlrd,xlwtwb=xlrd.open_workbook("XXX公司推荐成交明细.xlsx")ws=wb.sheet_by_index(0)print(ws.row_values(2)) #每一行作为一个列表total_list=[]for row in range(ws.nrows): row_list=ws.row_values(row) total_list.append(row_list)namedict={}for items in total_list: if items[1]==None or items[1]=="员工姓名": continue else: if items[1] in namedict.keys(): namedict[items[1]]["推荐数量"] += 1 namedict[items[1]]["累计认购金额"] +=items[-1] else: namedict.setdefault(items[1], {}) namedict[items[1]].setdefault("推荐数量",1) namedict[items[1]].setdefault("累计认购金额", items[-1])# 写操作wb = xlwt.Workbook()ws = wb.add_sheet("Sheet1")ws.write(0,0,label ="test")wb.save("测试.xls") #xlwt貌似只支持xls格式

xlrd和xlwt模式没有写全,本人太懒,有兴趣的朋友可以自己试着补全。需要注意,xlwt貌似只支持保存为.xls的表格。并且,在第二种方法中,使用了字典的嵌套,第一层字典的键为名字,值为字典。

总结

openpyxl和xlrd/xlwt中需要注意单元格的索引,openpyxl单元格行列编号从1开始,而xlrd/xlwt的编号从0开始。其他关于字体格式,以及自动化识别的操作,本人太懒没再研究。

[1]: openpyxl 的使用 - excel中数据转成列表/ 字典https://blog.csdn.net/GYK0812/article/details/104380629/
[2]: Python Openpyxl快速入门教程 https://blog.csdn.net/qq_33353186/article/details/79191069

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。