使用 Pandas 的 to_excel() 方法来将多个 csv 文件合并到一个 xlsx 的不同 sheets 内
这几天在用 Python3 研究一个爬虫,最后一个需求是把爬下来的20+个csv文件整合到一个excel表里的不同sheets。
初版的核心代码如下:
1 while year <= 2018: 2 csvPath = sys.path[0] + '/result/%d.csv' % year 3 excelPath = sys.path[0] + '/result.xlsx' 4 csvReader = pandas.read_csv(csvPath, encoding='utf_8_sig') 5 excelWriter = pandas.ExcelWriter(excelPath) 6 print("正在将 %d 年的 %d 条数据转换为 xlsx..." % (year, countThis)) 7 csvReader.to_excel(excelWriter, sheet_name=str(year)) 8 year = year + 1
奇怪的是使用这个方法,每次to_excel之后,result.xlsx中都只会存储一年的数据,只会存在一个sheet,之前的所有数据都会被覆盖。
通过查询官方文档(pandas.DataFrame.to_excel)和一个github上跨越了5年的issue(Allow ExcelWriter() to add sheets to existing workbook)得知pandas库的ExcelWriter缺失了一个mode='a'
的append模式,所以在这种情况下每次to_excel()都会直接新建一个文件写入而无视之前的数据。
解决方案是使用openpyxl engine来打开ExcelWriter,用openpyxl的load_workbook方法将之前已经存在的数据加载进ExcelWriter.book里。修改后的核心代码如下:
1 # 依赖 openpyxl 库 2 from openpyxl import load_workbook 3 4 while year <= 2018: 5 csvPath = sys.path[0] + '/result/%d.csv' % year 6 excelPath = sys.path[0] + '/result.xlsx' 7 csvReader = pandas.read_csv(csvPath, encoding='utf_8_sig') 8 # 增加 engine='openpyxl' 一栏 9 excelWriter = pandas.ExcelWriter(excelPath, engine='openpyxl') 10 # 使用 openpyxl 来把现有数据传递给excelWriter,使其在写入的时候保留原本数据 11 book = load_workbook(excelPath) 12 excelWriter.book = book 13 14 print("正在将 %d 年的 %d 条数据转换为 xlsx..." % (year, countThis)) 15 csvReader.to_excel(excelWriter, sheet_name=str(year)) 16 excelWriter.save()
如此存储的excel文件里就会有多个sheets了,每个sheets里都存储着一个csv里的全部数据。
需要注意的是这样做的效率非常低,因为这并不是真正的追加模式,而是在每一次创建ExcelWriter对象之后,先将现有的数据全部传入ExcelWriter,再将新的数据连同旧的数据一同写入一个新的文件并覆盖。这就导致程序作了许多重复而无用的工作,所以我在处理这个任务的时候。最后的几个10+m的csv文件的平均耗时都在300s以上,如果还有后续任务的话,这个数字会一直增长下去。得到一个80m的xlsx总表耗费了接近一个小时的时间,这对于一些更大的任务来说是难以接受的。所以如果你需要处理的任务比较巨大,你可以脱离pandas库而使用xlrd和xlwt里的方法,会使运行效率优雅不少。(也许直接使用excel的vba宏也是个不错的选择?)
来源:https://billc.io/2019/04/pandas-append-excel/
转载于:https://www.cnblogs.com/BillChen2000/p/pandas-append-excel.html
使用 Pandas 的 to_excel() 方法来将多个 csv 文件合并到一个 xlsx 的不同 sheets 内相关推荐
- linux下将多个文件去除文件头合并_shell命令实现当前目录下多个文件合并为一个文件的方法...
当前目录下多个文件合并为一个文件 1.将多个文件合并为一个文件没有添加换行符 find ./ -name "iptv_authenticate_201801*" | xargs c ...
- php中读取文件内容的几种方法。(file_get_contents:将文件内容读入一个字符串)...
php中读取文件内容的几种方法.(file_get_contents:将文件内容读入一个字符串) 一.总结 php中读取文件内容的几种方法(file_get_contents:将文件内容读入一个字符串 ...
- python 如何使用 pandas 在 flask web 网页中分页显示 csv 文件数据
目录 一.实战场景 二.知识点 python 基础语法 python 文件读写 python 分页 pandas 数据处理 flask web 框架 jinja 模版 三.菜鸟实战 初始化 Flask ...
- html 合并文件到excel,Excel2013把多个文件合并到一个Excel文档里方法图解
日常工作当中,会产生很多Excel文档,每当需要整理的时候又很难归类.查询.这个时候就需要把诺干个Excel文档,合并到一个Excel文档里.一个Excel文档对应一个Sheet工作表,方便查询.归类 ...
- 如何将两个或多个PDF文件合并成一个?这3个方法可以看看
在工作中,有时候我们需要把两个或多个PDF文件合并成一个,这样一来,可以方便阅读.修改,还能快速打印文件. 下面分享3个工具,看看如何将两个或多个PDF文件合并成一个文件. 方法一:使用美图工具 如果 ...
- python读csv最快方法_使用Python读写csv文件的三种方法
Python读写csv文件 觉得有用的话,欢迎一起讨论相互学习~Follow Me 前言 逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是 ...
- excel如何把多张表合并成一个表_如何将多个excel文件合并成一个文件-多个excel文件合并成一个excel表的方法 - 河东软件园...
Excel是我们最常用的数据处理软件,而在我们使用Excel时,常常会处理同一类的数据,例如,我们制作月度报表,那么在年末时我们共积累了1至12月的月度报表,这时我们的Excel的文档将多达12个,实 ...
- 实验七:掌握基本的MapReduce编程方法 (JAVA+Python实现)(编程实现文件合并和去重操作,编写程序实现对输入文件的排序,对给定的表格进行信息挖掘)
一.实验目的: 1. 理解MapReduce的工作机制: 2. 掌握基本的MapReduce编程方法 3. 重点理解map过程,shuffle过程和reduce过程 二.实验环境: Hadoop+Ec ...
- List中addAll方法怎么使用?将两个list合并和一个list?
addAll(Collection<? extends E> c)方法用于将指定 collection 中的所有元素添加到列表. addAll(int index,Collection&l ...
最新文章
- mysql text index_MySQL 全文索引(fulltext index)
- 13.19. File system test
- oracle经常开关好吗,oracle启动和关闭
- 我们如何衡量一个微服务实施的成功
- if condition 大于_条码打印软件之脚本编程的应用(if语句)
- 理科卷math·english·chinese·biology·chemistry·physics
- WPF 中的设备无关单位
- fragment嵌套viewpager嵌套fragment第二次加载数据不显示问题
- 学生学籍管理系统C语言实现
- 《重学 Java 设计模式》PDF 出炉了 - 小傅哥,肝了50天写出18万字271页的实战编程资料
- VUE Cascader省市二级联动 二级联动数据
- kivy开发android启动器,从kivy启动android播放器
- 于是,我搭了个自己的博客网站
- 泰拉瑞亚无限物品服务器,泰拉瑞亚1.4.0.5.2.1无限道具版
- 情人节程序员用HTML网页表白【粉色生日祝福网页】TML5七夕情人节表白网页源码 HTML+CSS+JavaScript
- 《嵌入式应用开发》实验一、开发环境搭建与布局
- 两年工作经验面试经验以及面试题分享
- python api接口10060_Python请求错误10060
- 无胁科技-TVD每日漏洞情报-2022-12-12
- Graphql入门_0
热门文章
- YOLOv4改进版重磅问世!Yolov4原班人马重磅推出Scaled-YOLOv4!业界最佳
- 重采样和重分类的区别
- 学计算机必须学会模拟电路,2016年广西大学计算机与电子信息学院1304电路分析基础与模拟电子线路之电路分析基础复试笔试仿真模拟题...
- 2篇word文档比较重复率_论文深耕 | 论文重复率太高怎么办?7个降重技巧收好了!...
- Realsense的使用
- ROS调用ORB-SLAM2
- 集合覆盖模型例题_在打CodeForces的过程中发现的一个小模型
- Tomcate服务器的基本知识概括总结及安装目录概括
- 携带token的ajax请求方法封装
- 小汤学编程之JavaEE学习day01——HTTP简介、B/S与C/S应用、连接的建立与断开、Tomcat