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 后,再次进入,在创建视图的时候添加表的列表就出现了新导入的 ...
随机推荐
- 技巧02--Terminal Preview优化
0x00 下载安装 可在MS应用商店安装,也可以直接百度下载安装包安装 0x01 设置默认自启 0x02 Terminal Preview美化 1.打开终端settings 2.点击这个Open JS ...
- 使用Hot Chocolate和.NET 6构建GraphQL应用(3) —— 实现Query基础功能
系列导航 使用Hot Chocolate和.NET 6构建GraphQL应用文章索引 需求 在本文中,我们通过一个简单的例子来看一下如何实现一个最简单的GraphQL的接口. 实现 引入Hot Cho ...
- Airtest 的连接安卓模拟器
1. 开启安卓模拟器 2. 查看进程,MEmuHeadless.exe的进行程号, 然后在cmd中输入 netstat -ano|findstr "16116" 3. 到 airt ...
- 学习MyBatis必知必会(5)~了解myBatis的作用域和生命周期并抽取工具类MyBatisUtil、mybatis执行增删改查操作
一.了解myBatis的作用域和生命周期[错误的使用会导致非常严重的并发问题] (1)SqlSessionFactoryBuilder [ 作用:仅仅是用来创建SqlSessionFactory,作用 ...
- 使用Typora+PicGo实现图片自动上传到Gitee图床
一.前言 我们在使用Typora编辑器时,会加上图片,有个弊端,只能在本地访问,你发送给别人就无法查看图片,当然可以导出pdf.小编这边的需求是这样的,自己搭建的一个博客系统,基于Hexo搭建的,这个 ...
- curl 查看接口的网络分段响应时间
示例如下 curl -o /dev/null -s -w %{time_namelookup}::%{time_connect}::%{time_starttransfer}::%{time_tota ...
- Linux发行版·常见Linux系统下载
本专题页汇总最受欢迎的Linux发行版基本介绍和下载地址,如果您是一位刚接触Linux的新手,这里的介绍可能对您有所帮助,如果您是以为Linux使用前辈,也可以在评论处留下您宝贵意见和经验,以便让更多 ...
- Centos 7 下部署Django + uWSGI + Nginx
1.废话 之前利用Django写了些测试工具,一直是直接 python manage.py runserver 8081这么来用的.用户量不大,倒也不影响什么.uWSGI+Nginx的性能肯定要好,s ...
- android+json+php+mysql实现用户反馈功能
相信每个项目都会有用户反馈建议等功能,这个实现的方法很多,下面是我实现的方法,供大家交流.首先看具体界面,三个字段.名字,邮箱为选填,可以为空,建议不能为空.如有需要可以给我留言. 下面贴出布局代码, ...
- tip1:学习使用mybatis中使用mysql数据库的基本操作
1.查看mysql服务是否启动: 2.root用户链接数据库:mysql -u root -p,随后输入正确的密码即可. 3.root用户创建数据库: 4.查看已建数据库:show databases ...