python合并excel相同元素的不同数据,python 合并多张excel 处理重复数据
故事提要:
有个运营的朋友, 6张excel 表需要合并到一张表, 每张表大约65536 个数据, 其中重复的item 需要按一定规则合并。
如果用电脑直接合并excel , 由于数据过多, 系统总是崩溃, 朋友试了很多方法一周也没完美搞定。
正好帮个忙,拿来用python练练手~
比如下面两个重复的数据:
合并后的结果是:
pwk_id :不变, 访问次数: 1+1 = 2 , 操作系统: PC , 总计访问时长:565 + 565 = 1130 , pv: max(2,2) = 2
Do it now:
两小时时间边学边实践写了个简单的python程序, 帮他生成一下合并结果。以后也能用,妈妈再也不用担心我们的数据重复的问题了。
使用经典python 2.7.10 工具库 xlwt + xlrd
下面是所有程序源代码:
#!/usr/bin/python
# -*- coding: utf-8 -*-
import xlwt
import xlrd
import os
# 需要合并的文件目录
dir = '/Users/jesselu/Desktop/excels/'
files = os.listdir(dir)
files = map(lambda path:os.path.join(dir,path),files)
print files
# book1 = xlrd.open_workbook(file,"rd")
def generateResult(files):
def printSheetInfo(book):
print "表单数量", book.nsheets
print "表单名称", book.sheet_names()
sheet0 = book.sheet_by_index(0)
print u"表单%s 共 %d 行 %d 列" % (book.sheet_names()[0], sheet0.nrows, sheet0.ncols)
def mergeRow(old, new):
old[1].value = old[1].value + new[1].value
old[3].value = old[3].value + new[3].value
old[4].value = max(old[4].value, new[4].value)
return old
resultDict = {}
# 合并重复项
for path in files:
book = xlrd.open_workbook(path, "rd")
printSheetInfo(book)
for sheet in book.sheets():
for r in range(sheet.nrows):
row = sheet.row(r)
old_row = resultDict.get(row[0].value, -1)
if old_row < 0:
resultDict[row[0].value] = row
else:
resultDict[row[0].value] = mergeRow(old_row, row)
return resultDict
def write(resultDict):
wb = xlwt.Workbook(encoding='utf-8')
def writeRow(sheet, rowNum, data):
sheet.write(rowNum,0, data[0].value)
sheet.write(rowNum, 1, data[1].value)
sheet.write(rowNum, 2, data[2].value)
sheet.write(rowNum, 3, data[3].value)
sheet.write(rowNum, 4, data[4].value)
def writeHeader(sheet):
sheet.write(0,0,'pwk_id')
sheet.write(0,1,'访问次数')
sheet.write(0, 2, '操作系统')
sheet.write(0, 3, '总计访问时长')
sheet.write(0, 4, 'pv')
sheetId = 0
row_num = 0
resultSheet = wb.add_sheet('mergedSheet', cell_overwrite_ok=True)
writeHeader(resultSheet)
for d, x in resultDict.items():
row_num = row_num + 1
if row_num % 65535 == 0:
sheetId = sheetId + 1
resultSheet = wb.add_sheet(str.format('mergedSheet{}',sheetId), cell_overwrite_ok=True)
writeHeader(resultSheet)
row_num = 0
else:
writeRow(resultSheet,row_num, x)
wb.save('/Users/jesselu/Desktop/excels/result.xls')
if __name__ == "__main__":
write(generateResult(files))
结果:
修改路径之后和处理逻辑后直接可用, 大约1分钟, 合并万6张表, 去掉重复数据4万多个。
感悟:
python 练手项目, “人生苦短,早用python”
参考资料:
python excel 社区官方文档
python合并excel相同元素的不同数据,python 合并多张excel 处理重复数据相关推荐
- python做表格真的快吗_厉害!一百多张Excel表用Python竟然不到3秒就处理完了?
案例背景 在另一个平行世界,有一家专注于户外运动的巨头公司.既然是巨头,为了更加亲切,我们就叫他大头吧.大头的旗下有20个品牌,这些品牌涉及到128个类目(细分行业),涉及范围之广令人咋舌,可谓遍地开 ...
- python对大量数据去重_Python对多属性的重复数据去重实例
python中的pandas模块中对重复数据去重步骤: 1)利用DataFrame中的duplicated方法返回一个布尔型的Series,显示各行是否有重复行,没有重复行显示为FALSE,有重复行显 ...
- excel删除重复数据保留一条_Excel一键删除重复数据,你居然还用逐条排查?
平时用Excel表格处理大量数据的时候,总会遇到大量的重复无效数据. 如果只有几十条数据,也就罢了,一条一条比对,很快也能清理完,可是如果数据多达上百条,甚至成千上万条,还是去一条一条筛选,那得排查到 ...
- Java对比两张Excel表的数据,java对比两个excel或者一张excel和数据库的一张表的数据是否相同,两张excel表格匹配相同的数据库...
excel自动从数据库匹配相应的数据 vlookup函数:vlookup(lookup_value,table_array,col_index_num,[range_lookup]) 第一个:look ...
- 办公软件使用学习笔记:excel第三节。excel快速录入数据,常见输入快捷方法,重复数据快速输入,数据从文本中简单导入。
excel数据快速输入 数据快速输入快捷键. Tab键:横向向右切换一个单元格. Enter键:向下切换一个单元格. 上下左右四个切换选中的单元格. 日期输入问题:日期只识别2020/1/12或202 ...
- c++删除数组中重复元素_PG13中的功能—B树索引中的重复数据删除
PostgreSQL 13 Beta 1版本于2020年5月21日发布,PostgreSQL 13 Beta 2版本于2020年6月25日发布.虽然Beta 版本中依旧包含一些错误,但是它总是几乎涵盖 ...
- oracle删除表中数据_Excel工作表中,删除重复数据的2种方法解读,高效且实用!...
在实际的工作中,经常要对工作表中重复的数据进行删除,如若数据行只有几条,则可通过人工查找出来,如若数据行较多,这种方法就费时费力,而且容易出错,造成对表格数据的准确性和个人能力的怀疑--今天,小编给大 ...
- c datatable导入mysql_《项目经验》–简单三层使用DataTable向数据库表批量导入数据—向SqlServer一张表中导入数据 | 学步园...
向数据库的一张表中添加数据,可以采用单个添加,即一条数据.一条数据的添加:也可以采用批量导入,依次将好些条数据写入数据库的一张表中.文本借助实例<添加系列信息>讲解一种向数据库批量导入数据 ...
- sql重复数据取日期小的_excel快速查询重复数据的3个小技巧
在大量的数据当中怎么快速的查询数据是否有重复,并进行删除.方法有以下几种,通过菜单栏查询删除重复值,用vlookup查询删除重复值以及countif查询删除重复值. 1.菜单栏查询&删除重复数 ...
- mysql怎么查找删除重复数据_Mysql中如何查找并删除重复数据
考试系统中做了一个用户导入试题功能,导致用户导入了很多重复的试题,我需要查询及删除一下重复的记录,于是有了这篇文章. (一)单个字段 1.查找表中多余的重复记录,根据(question_title)字 ...
最新文章
- JSP中base href=%=basePath%的作用
- eclipse开发javaweb项目中The superclass javax.servlet.http.HttpServlet was not found on the Java Build
- macOS/MacBook Air设置使用iCloud的APP
- 《Servlet学习笔记》Servlet开发细节-线程安全
- 2020国货品牌力发展报告
- 程序员看不起事业单位员工:一年收入才4万?网友:40岁再比一比,究竟谁更牛逼!!
- 机器学习 | 算法笔记- 集成学习(Ensemble Learning)
- CentOS安装MySql报错:mysql error: Failed dependencies
- java string date_Java基础教程:Java之Object类,Objects类,Date类概念及使用!
- C语言实现的简易FTP客户端
- win7美化_笔记本怎么外接显示器?附Windows效率加倍/桌面美化实用技巧
- IE代理服务器没有响应 浏览器无法打开网页解决方法
- python win32gui使用_python win32 简单操作
- 终端常用的命令及功能
- css3 3d头像,创意css3头像展示_觉唯设计
- 理论+实操 :部署YUM仓库以及NFS资源共享服务————理论讲解
- 敦煌研究院吴健部长一行来我司调研“十三五”国家重点研发计划子课题进展
- 关于iOS中图片处理的小结
- hbw-utils - 基本数据类型的toString()实现
- 关于pc页面在手机屏幕显示不全
热门文章
- github 这个网站到底是干嘛用的?
- 融合计费账务系统架构与核心功能的研究与实现
- Android Studio 期末大作业(英语app)[免费开源]
- 直接转矩系统和矢量控制系统
- oracle+并非所有变量,ORA-01008:并非所有变量都已绑定异常错误汇总解决方案
- 每天学点数据库之-----Day 1-数据库的一些基本概念
- 智能优化算法(Ga,PSO,SA)高度模块化(可直接调用)python实现
- io.minio.errors.ErrorResponseException: The request signature we calculated does not match the signa
- 2023考研初试时间临近,考前焦虑怎么缓解?
- CCF认证 2020-9 称检测点查询