Pandas:to_excel时如何不覆盖之前的Excel表、ExcelWriter类
如果只是想把一个DataFrame保存为单独的一个Excel文件,那么直接写:
data.to_excel('xxx.excel','sheet1',index=False)
但是这样做,只会保存为单个Excel文件和这个文件中的单个表。
如果先前存在有同名的Excel文件,这样做会把之前的Excel文件覆盖掉,不会起到在原文件中生成新的sheet的作用。
解决方法:
if not os.path.exists(mon_excel_path):
data_write.to_excel(mon_excel_path, f'{mon}.{day}',encoding='GBK', header=['站点', '变化', '次数', '幅度/nt'], index=False)
else:
with pd.ExcelWriter(mon_excel_path, engine='openpyxl',mode='a') as writer:
data_write.to_excel(writer,f'{mon}.{day}', header=['站点', '变化', '次数', '幅度/nt'], index=False)
上文各行代码的解释:
第一个if语句是在Excel文件不存在时,用于直接构建;
第二个if语句则是用ExcelWriter对已存在的Excel文件进行追加。
需要注意的是,如果Excel文件名含有中文,第一句的to_excel中的参数encoding需要写为'GBK',否则会导致追加时生成ExcelWriter异常,报错File is not a ZIP file。
补充
在Pandas 1.2.0版本之后(不含1.2.0),engine参数将弃用xlwt值,因此要使用xlwt引擎,请确保电脑上的pandas版本为1.2.0及以下,或者最好不使用xlwt。
下文是对ExcelWriter的补充说明,上文已经解决问题的可以不看下文。
ExcelWriter
pandas.ExcelWriter — pandas 1.3.3 documentation
构造
pd.ExcelWriter(
path, engine=None, date_format=None, datetime_format=None,
mode='w', storage_options=None, if_sheet_exists=None,
engine_kwargs=None, **kwargs
)
说明
这是一个用于把DataFrame对象写入Excel表的辅助类。
默认情况下,用xlwt来写xls,用openpyxl写入xlsx,用odf写入ods。如果想看一些更典型的用例,可以看DataFrame.to_excel
Writer构造时需要像打开文件那样进行上下文管理,也就是,使用with语句块的方式创建。不然的话就需要手动调用close()来关闭保存文件。
参数
参数 | 
类型 | 
默认值 | 
说明 | 
| path | str | xls、xlsx、ods文件的路径 | |
| engine | str | 引擎 | |
| date_format | str | date写入Excel后的字符串格式('YYYY-MM-DD') | |
| datetime_format | str | datetime写入Excel后的字符串格式('YYYY-MM-DD HH:MM:SS') | |
| mode | {'w','a'} | 'w' | 写入模式,覆盖还是追加 | 
| storage_options | dict | ||
| if_sheet_exists | {'error','new','replace'} | 'error' | 尝试写入一个已经存在的sheet时的响应方式:错误、新建、替换 | 
| engine_kwargs | dict | 传入引擎中的参数,从1.3.0才启用的 | 
例子
1、构造一个DataFrame,写入xlsx中;
df = pd.DataFrame([["ABC", "XYZ"]], columns=["Foo", "Bar"])
with ExcelWriter("path_to_file.xlsx") as writer:
df.to_excel(writer)
2、在同一个xlsx文件中,把两个DataFrame分别写入两个SHEET中;
df1 = pd.DataFrame([["AAA", "BBB"]], columns=["Spam", "Egg"])
df2 = pd.DataFrame([["ABC", "XYZ"]], columns=["Foo", "Bar"])
with ExcelWriter("path_to_file.xlsx") as writer:
df1.to_excel(writer, sheet_name="Sheet1")
df2.to_excel(writer, sheet_name="Sheet2")
3、设置date和datetime的格式;
from datetime import date, datetime
df = pd.DataFrame(
[
[date(2014, 1, 31), date(1999, 9, 24)],
[datetime(1998, 5, 26, 23, 33, 4), datetime(2014, 2, 28, 13, 5, 13)],
],
index=["Date", "Datetime"],
columns=["X", "Y"],
)
with ExcelWriter(
"path_to_file.xlsx",
date_format="YYYY-MM-DD",
datetime_format="YYYY-MM-DD HH:MM:SS"
) as writer:
df.to_excel(writer)
4、往已存在的Excel中追加;
with ExcelWriter("path_to_file.xlsx",mode='a',engine='openpyxl') as writer:
     df.to_excel(writer,sheet_name='Sheet3')
Pandas:to_excel时如何不覆盖之前的Excel表、ExcelWriter类的更多相关文章
- 【Java实战】源码解析为什么覆盖equals方法时总要覆盖hashCode方法
		
1.背景知识 本文代码基于jdk1.8分析,<Java编程思想>中有如下描述: 另外再看下Object.java对hashCode()方法的说明: /** * Returns a hash ...
 - mysql覆盖索引与回表
		
mysql覆盖索引与回表 Harri2012关注 62019.07.28 11:14:15字数 1,292阅读 77,322 select id,name where name='shenjian' ...
 - 解决将Excel表导入到SQL Server数据库时出现Text was truncated or one or more characters had no match in the target code错误
		
编写python爬虫程序可以在电商.旅游等网站上爬取相关评论数据,这些数据可以用于词云制作.感情词分析.提取关键词等,也可以将爬取下来的数据以自己的方式进行展示.评论数据爬取下来后,就要考虑怎样入库, ...
 - C# asp.net中导出Excel表时总出现"只能在执行 Render() 的过程中调用 RegisterForEventValidation
		
C# asp.net中导出Excel表时总出现"只能在执行 Render() 的过程中调用 RegisterForEventValidation 后台添加以下方法:/// <summa ...
 - VMWare------安装时出现无法将值写入注册表项
		
安装时提示详情: 无法打开注册表项UNKNOWN\Components\...请确认你是否有足够的权限访问该注册表项,或者与技术支持人员联系. 解决方法: 关掉360安全卫士等软件再安装
 - 将DataTable 覆盖到 SQL某表(包括表结构及所有数据)
		
调用代码: string tableName = "Sheet1"; openFileDlg.ShowDialog(); DataTable dt = GeneralFun.Fil ...
 - SpringMVC 中,当前台传入多个参数时,可将参数封装成一个bean类
		
在实际业务场景中,当前台通过 url 向后台传送多个参数时,可以将参数封装成一个bean类,在bean类中对各个参数进行非空,默认值等的设置. 前台 url ,想后台传送两个参数,userName 和 ...
 - 在动态sql的使用where时,if标签判断中,如果实体类中的某一个属性是String类型,那么就可以这样来判断连接语句:
		
在动态sql的使用where时,if标签判断中,如果实体类中的某一个属性是String类型,那么就可以这样来判断连接语句: 如果是String类型的字符串进行判空的时候: <if test=&q ...
 - sql server 创建视图添加表时出现从其他数据库导入的表未显示出来
		
创建视图添加表时出现从其他数据库导入的表未显示出来,通过数据库刷新,也不能解决.关闭SQL server management studio 后,再次进入,在创建视图的时候添加表的列表就出现了新导入的 ...
 
随机推荐
- 获取nginx日志状态码百分比脚本
			
#!/bin/bash pwd=/app/nginx/logs/access.log for num1 in `cat $pwd | awk '{print $9}' | grep -Ei " ...
 - 尚硅谷全套课件整理:Java、前端、大数据、安卓、面试题
			
目录 Java 尚硅谷 IT 精英计划 JavaSE 内部学习笔记.pdf 尚硅谷 Java 基础实战之银行项目.pdf 尚硅谷 Java 技术之 JDBC.pdf 尚硅谷 Java 技术之 Java ...
 - 带你读AI论文:NDSS2020 UNICORN: Runtime Provenance-Based Detector
			
摘要:这篇文章将详细介绍NDSS2020的<UNICORN: Runtime Provenance-Based Detector for Advanced Persistent Threats& ...
 - 使用Maven导入MySQL驱动包遇到的问题
			
问题描述 今天在使用Maven导入MySQL数据库驱动包依赖后,直接运行项目,出现错误. java.sql.SQLException: No suitable driver found for jdb ...
 - 超详细的node/v8/js垃圾回收机制
			
前言 垃圾回收器是一把十足的双刃剑.其好处是可以大幅简化程序的内存管理代码,因为内存管理无需程序员来操作,由此也减少了(但没有根除)长时间运转的程序的内存泄漏.对于某些程序员来说,它甚至能够提升代码的 ...
 - 使用df -h命令查看磁盘空间使用率不算高,还有很多空余空间,但是创建文件或写入数据时一直报错磁盘写满
			
关于磁盘空间中索引节点爆满的问题还是挺多的,借此跟大家分享一下: 一.发现问题 在公司一台配置较低的Linux服务器(内存.硬盘比较小)的/data分区内创建文件时,系统提示磁盘空间不足,用df -h ...
 - Eclipse 找不到或者无法加载主类
			
最近因为频繁练习JDBC更换了几次驱动jar包,然后突然发现出现了找不到或者无法加载主类的错误, 项目上出现了一个感叹号. 解决方法: 项目-右键 properties-java Build Path ...
 - Java多线程之读写锁机制
			
Java多线程中有很多的锁机制,他们都有各自的应用场景,例如今天我说的这种锁机制:读写锁 读写锁,见名知意,主要可以进行两种操作,读和写操作,他们之间结合使用起来又是各不相同的.比如多个线程之间可以同 ...
 - 配置docker的DNS
			
方式一:在宿主机的 /etc/docker/daemon.json 文件中增加以下内容来设置全部容器的 DNS: { "dns" : [ "114.114.114.114 ...
 - Idea个人配置
			
Intellij IDEA配置 1. 优化导包配置 2. 取消tab页单行显示 多行显示更多的文件,方便查看. 3. 双斜杠注释改成紧跟代码头 4. 选中复制整行 原本只会复制你选中的代码,改完配置后 ...