这几天在用 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 内相关推荐

  1. linux下将多个文件去除文件头合并_shell命令实现当前目录下多个文件合并为一个文件的方法...

    当前目录下多个文件合并为一个文件 1.将多个文件合并为一个文件没有添加换行符 find ./ -name "iptv_authenticate_201801*" | xargs c ...

  2. php中读取文件内容的几种方法。(file_get_contents:将文件内容读入一个字符串)...

    php中读取文件内容的几种方法.(file_get_contents:将文件内容读入一个字符串) 一.总结 php中读取文件内容的几种方法(file_get_contents:将文件内容读入一个字符串 ...

  3. python 如何使用 pandas 在 flask web 网页中分页显示 csv 文件数据

    目录 一.实战场景 二.知识点 python 基础语法 python 文件读写 python 分页 pandas 数据处理 flask web 框架 jinja 模版 三.菜鸟实战 初始化 Flask ...

  4. html 合并文件到excel,Excel2013把多个文件合并到一个Excel文档里方法图解

    日常工作当中,会产生很多Excel文档,每当需要整理的时候又很难归类.查询.这个时候就需要把诺干个Excel文档,合并到一个Excel文档里.一个Excel文档对应一个Sheet工作表,方便查询.归类 ...

  5. 如何将两个或多个PDF文件合并成一个?这3个方法可以看看

    在工作中,有时候我们需要把两个或多个PDF文件合并成一个,这样一来,可以方便阅读.修改,还能快速打印文件. 下面分享3个工具,看看如何将两个或多个PDF文件合并成一个文件. 方法一:使用美图工具 如果 ...

  6. python读csv最快方法_使用Python读写csv文件的三种方法

    Python读写csv文件 觉得有用的话,欢迎一起讨论相互学习~Follow Me 前言 逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是 ...

  7. excel如何把多张表合并成一个表_如何将多个excel文件合并成一个文件-多个excel文件合并成一个excel表的方法 - 河东软件园...

    Excel是我们最常用的数据处理软件,而在我们使用Excel时,常常会处理同一类的数据,例如,我们制作月度报表,那么在年末时我们共积累了1至12月的月度报表,这时我们的Excel的文档将多达12个,实 ...

  8. 实验七:掌握基本的MapReduce编程方法 (JAVA+Python实现)(编程实现文件合并和去重操作,编写程序实现对输入文件的排序,对给定的表格进行信息挖掘)

    一.实验目的: 1. 理解MapReduce的工作机制: 2. 掌握基本的MapReduce编程方法 3. 重点理解map过程,shuffle过程和reduce过程 二.实验环境: Hadoop+Ec ...

  9. List中addAll方法怎么使用?将两个list合并和一个list?

    addAll(Collection<? extends E> c)方法用于将指定 collection 中的所有元素添加到列表. addAll(int index,Collection&l ...

最新文章

  1. mysql text index_MySQL 全文索引(fulltext index)
  2. 13.19. File system test
  3. oracle经常开关好吗,oracle启动和关闭
  4. 我们如何衡量一个微服务实施的成功
  5. if condition 大于_条码打印软件之脚本编程的应用(if语句)
  6. 理科卷math·english·chinese·biology·chemistry·physics
  7. WPF 中的设备无关单位
  8. fragment嵌套viewpager嵌套fragment第二次加载数据不显示问题
  9. 学生学籍管理系统C语言实现
  10. 《重学 Java 设计模式》PDF 出炉了 - 小傅哥,肝了50天写出18万字271页的实战编程资料
  11. VUE Cascader省市二级联动 二级联动数据
  12. kivy开发android启动器,从kivy启动android播放器
  13. 于是,我搭了个自己的博客网站
  14. 泰拉瑞亚无限物品服务器,泰拉瑞亚1.4.0.5.2.1无限道具版
  15. 情人节程序员用HTML网页表白【粉色生日祝福网页】TML5七夕情人节表白网页源码 HTML+CSS+JavaScript
  16. 《嵌入式应用开发》实验一、开发环境搭建与布局
  17. 两年工作经验面试经验以及面试题分享
  18. python api接口10060_Python请求错误10060
  19. 无胁科技-TVD每日漏洞情报-2022-12-12
  20. Graphql入门_0

热门文章

  1. YOLOv4改进版重磅问世!Yolov4原班人马重磅推出Scaled-YOLOv4!业界最佳
  2. 重采样和重分类的区别
  3. 学计算机必须学会模拟电路,2016年广西大学计算机与电子信息学院1304电路分析基础与模拟电子线路之电路分析基础复试笔试仿真模拟题...
  4. 2篇word文档比较重复率_论文深耕 | 论文重复率太高怎么办?7个降重技巧收好了!...
  5. Realsense的使用
  6. ROS调用ORB-SLAM2
  7. 集合覆盖模型例题_在打CodeForces的过程中发现的一个小模型
  8. Tomcate服务器的基本知识概括总结及安装目录概括
  9. 携带token的ajax请求方法封装
  10. 小汤学编程之JavaEE学习day01——HTTP简介、B/S与C/S应用、连接的建立与断开、Tomcat