当前位置: 首页 > news >正文

asp python 混合_​用 Python 让 Excel 表格合并飞起来

原标题:​用 Python 让 Excel 表格合并飞起来

来源:Python数据之道

作者:Lee

用 Python 让 Excel 表格合并飞起来

问题提出

我们在工作中经常会遇到如下情况,从不同部门或者不同单位收集到若干个表格,每个表格的内容相同(列内容一致),需要将他们汇总到同一个表格中。Python 作为数据分析的神器,只需要简单行代码就可以让表格合并飞起来,并且代码可以多次复用。

解法1用 Python 循环进行自动合并

闲话少说,直接上代码了。

importpandas aspd

importtime

filelist = [ 'c:/python/aSourseFiles/bi/bi ('+ str(i+ 1) + ').xlsx'fori inrange( 40)] #需要打开的文件列表,如果要自己运行代码,找一个excel复制40遍再重命名就行了。

start = time.time #用于计时。

df = pd.read_excel(filelist[ -1]) #以最后一个文件为基础进行合并操作

fori inrange( 39): #将其余39个文件与最后一个合并

df = pd.concat([df, pd.read_excel(filelist[i])])

print(i)

end = time.time

run_time = end - start

print( '本次运行耗时%.02f'%(run_time))

运行结果如下:

PS:我们的 Excel 表一般是附带表头的,合并的时候是从某行开始,例如,我们需要从第二行开始时,只需改为 pd.read_excel(filelist[i])[1:] ,注意 0 才是第一行, 1 是第二行。

这个操作优点是简单易懂,学几天 Python 就可以搞的定( Python 上手确实太太太容易了),适用于表格行数比较少的情况;缺点是比较耗时,如果行数比较多(比如我使用的是 5W 行),上个厕所回来还没运行完。

解法2Python多进程操作

岁月虽漫长,但也耐不住时光如梭,多快好省才是硬道理。

程序要做的是两件事儿:(1)打开文件;(2)将打开的文件合并在一起。我们先运行一小段代码测试下这两个功能各自的时耗。

importtime

importpandas aspd

start = time.time

df1 = pd.read_excel( r'c:/python/aSourseFiles/bi/bi (1).xlsx')

df2 = pd.read_excel( r'c:/python/aSourseFiles/bi/bi (2).xlsx')

df3 = pd.read_excel( r'c:/python/aSourseFiles/bi/bi (3).xlsx')

median = time.time

df = pd.concat([df1, df2, df3])

end = time.time

use1 = median - start #计算打开文件耗时

use2 = end - median #计算合并表格耗时

print(use1)

print(use2)

运行结果如下:

分析发现,时间主要浪费在打开文件上了,因此用多进程一次多打开几个,理论上来说是可以节省时间的,说干就干:

importpandas aspd

importtime

frommultiprocessing importPool

filelist = [ 'c:/python/aSourseFiles/bi/bi ('+ str(i+ 1) + ').xlsx'fori inrange( 40)]

defread_excel(path):

temp = pd.read_excel(path)

print( 'running')

returntemp

defmerge_excel(temp):

globaldf

df = pd.concat([df, temp])

if__name__ == '__main__':

start = time.time

df = pd.read_excel(filelist[ -1]) #以最后一个文件为基础进行合并操作

p1 = Pool( 8) #生成8个进程

fori inrange( 39):

p1.apply_async(read_excel, args=(filelist[i],), callback=merge_excel) #将打开文件的任务放入到进程中,完成任务时回调merge_excel进行合并

p1.close

p1.join

print(df.shape)

end = time.time

run_time = end - start

print( '本次运行耗时%.02f'%(run_time))

运行结果如下:

果然是比之前快了些,上个厕所回来就可以拿到结果了。

拓展

这段代码依旧是有点鸡肋。40 个excel,每个 5W 行,合计 200W 行,合并完再放进 Excel 中就不大现实了。这个时候,我们可以通过把数据放入到数据库中进行解决,有兴趣的小伙伴可以自己尝试下。

文末福利

考拉收集了 21 张 Python 代码速查表,每一张都是国外的大师总结的,非常实用 ~

还有 2 张高清的 PyCharm 快捷键一览图,一张 Windows,一张 Mac,放在桌面上,需要的时候打开一查,非常方便。。

怎么获取呢?

关注编程派公众号,回复关键词「 f」获取

题图:pexels,CC0 授权返回搜狐,查看更多

责任编辑:

相关文章:

  • python abc模块_Python
  • 线程自动退出_Java开发课程(十八)——多线程 2、多线程编程
  • 图像条纹检测 python_衍射时差法超声波检测(TOFD)告诉你焊接缺陷到底是什么样的!...
  • python一元二次方程表达式_Python实现求解一元二次方程的方法示例
  • python并发和并行_python并发编程(并发与并行,同步和异步,阻塞与非阻塞)
  • oracle rds 运维服务_我应该为无服务器应用程序选择哪个数据库?
  • cmd传入命令行打开程序_CMD命令行中以管理员权限启动应用程序实现方法
  • gb和gib的区别_GB和GiB的区别
  • p6与project哪个软件好_多功能记事本软件哪个好?
  • python tensorflow教程推荐_有哪些学习python和tensorflow的书籍值得推荐呢?
  • 计算机网络课设telnet_修改windows的telnet默认根路径
  • centos7安装php5.2yum源操作_centos 7.4系统yum安装php最新版本php7.2
  • 笔记本卡顿不流畅是什么原因_电脑卡顿不流畅是什么原因?PC卡顿原来可以这么解决...
  • web前端行业调研报告_2015 年 JavaScript 开发者调查报告
  • centos7双机搭建_centos 7之keepalived双机热备理论+配置文件详解
  • 分享一款快速APP功能测试工具
  • 【前端学习】-粗谈选择器
  • Android组件 - 收藏集 - 掘金
  • Angular 4.x 动态创建组件
  • Angular js 常用指令ng-if、ng-class、ng-option、ng-value、ng-click是如何使用的?
  • C++入门教程(10):for 语句
  • If…else
  • Js基础知识(四) - js运行原理与机制
  • Python 使用 Tornado 框架实现 WebHook 自动部署 Git 项目
  • Python代码面试必读 - Data Structures and Algorithms in Python
  • unity如何实现一个固定宽度的orthagraphic相机
  • 利用DataURL技术在网页上显示图片
  • 面试总结JavaScript篇
  • 前端工程化(Gulp、Webpack)-webpack
  • 如何解决微信端直接跳WAP端
  • 如何优雅的使用vue+Dcloud(Hbuild)开发混合app
  • 小试R空间处理新库sf
  • - 语言经验 - 《c++的高性能内存管理库tcmalloc和jemalloc》
  • Play Store发现SimBad恶意软件,1.5亿Android用户成受害者 ...
  • ​插件化DPI在商用WIFI中的价值
  • (Redis使用系列) Springboot 使用redis实现接口幂等性拦截 十一
  • (二)什么是Vite——Vite 和 Webpack 区别(冷启动)
  • (二开)Flink 修改源码拓展 SQL 语法
  • (附源码)springboot课程在线考试系统 毕业设计 655127
  • (附源码)计算机毕业设计SSM疫情社区管理系统
  • (四) 虚拟摄像头vivi体验
  • (学习日记)2024.03.25:UCOSIII第二十二节:系统启动流程详解
  • (一)Thymeleaf用法——Thymeleaf简介
  • (转)Windows2003安全设置/维护
  • .NET学习教程二——.net基础定义+VS常用设置
  • .sdf和.msp文件读取
  • /3GB和/USERVA开关
  • @test注解_Spring 自定义注解你了解过吗?
  • [2013AAA]On a fractional nonlinear hyperbolic equation arising from relative theory
  • [2023年]-hadoop面试真题(一)
  • [AAuto]给百宝箱增加娱乐功能
  • [AutoSar]BSW_Memory_Stack_004 创建一个简单NV block并调试
  • [C#]winform制作仪表盘好用的表盘控件和使用方法
  • [C#]扩展方法
  • [C#]无法获取源 https://api.nuge t.org/v3-index存储签名信息解决方法