如果只是想把一个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类的更多相关文章

  1. 【Java实战】源码解析为什么覆盖equals方法时总要覆盖hashCode方法

    1.背景知识 本文代码基于jdk1.8分析,<Java编程思想>中有如下描述: 另外再看下Object.java对hashCode()方法的说明: /** * Returns a hash ...

  2. mysql覆盖索引与回表

    mysql覆盖索引与回表 Harri2012关注 62019.07.28 11:14:15字数 1,292阅读 77,322 select id,name where name='shenjian' ...

  3. 解决将Excel表导入到SQL Server数据库时出现Text was truncated or one or more characters had no match in the target code错误

    编写python爬虫程序可以在电商.旅游等网站上爬取相关评论数据,这些数据可以用于词云制作.感情词分析.提取关键词等,也可以将爬取下来的数据以自己的方式进行展示.评论数据爬取下来后,就要考虑怎样入库, ...

  4. C# asp.net中导出Excel表时总出现"只能在执行 Render() 的过程中调用 RegisterForEventValidation

    C# asp.net中导出Excel表时总出现"只能在执行 Render() 的过程中调用 RegisterForEventValidation 后台添加以下方法:/// <summa ...

  5. VMWare------安装时出现无法将值写入注册表项

    安装时提示详情: 无法打开注册表项UNKNOWN\Components\...请确认你是否有足够的权限访问该注册表项,或者与技术支持人员联系. 解决方法: 关掉360安全卫士等软件再安装

  6. 将DataTable 覆盖到 SQL某表(包括表结构及所有数据)

    调用代码: string tableName = "Sheet1"; openFileDlg.ShowDialog(); DataTable dt = GeneralFun.Fil ...

  7. SpringMVC 中,当前台传入多个参数时,可将参数封装成一个bean类

    在实际业务场景中,当前台通过 url 向后台传送多个参数时,可以将参数封装成一个bean类,在bean类中对各个参数进行非空,默认值等的设置. 前台 url ,想后台传送两个参数,userName 和 ...

  8. 在动态sql的使用where时,if标签判断中,如果实体类中的某一个属性是String类型,那么就可以这样来判断连接语句:

    在动态sql的使用where时,if标签判断中,如果实体类中的某一个属性是String类型,那么就可以这样来判断连接语句: 如果是String类型的字符串进行判空的时候: <if test=&q ...

  9. sql server 创建视图添加表时出现从其他数据库导入的表未显示出来

    创建视图添加表时出现从其他数据库导入的表未显示出来,通过数据库刷新,也不能解决.关闭SQL server management studio 后,再次进入,在创建视图的时候添加表的列表就出现了新导入的 ...

随机推荐

  1. 技巧02--Terminal Preview优化

    0x00 下载安装 可在MS应用商店安装,也可以直接百度下载安装包安装 0x01 设置默认自启 0x02 Terminal Preview美化 1.打开终端settings 2.点击这个Open JS ...

  2. 使用Hot Chocolate和.NET 6构建GraphQL应用(3) —— 实现Query基础功能

    系列导航 使用Hot Chocolate和.NET 6构建GraphQL应用文章索引 需求 在本文中,我们通过一个简单的例子来看一下如何实现一个最简单的GraphQL的接口. 实现 引入Hot Cho ...

  3. Airtest 的连接安卓模拟器

    1. 开启安卓模拟器 2. 查看进程,MEmuHeadless.exe的进行程号, 然后在cmd中输入 netstat -ano|findstr "16116" 3. 到 airt ...

  4. 学习MyBatis必知必会(5)~了解myBatis的作用域和生命周期并抽取工具类MyBatisUtil、mybatis执行增删改查操作

    一.了解myBatis的作用域和生命周期[错误的使用会导致非常严重的并发问题] (1)SqlSessionFactoryBuilder [ 作用:仅仅是用来创建SqlSessionFactory,作用 ...

  5. 使用Typora+PicGo实现图片自动上传到Gitee图床

    一.前言 我们在使用Typora编辑器时,会加上图片,有个弊端,只能在本地访问,你发送给别人就无法查看图片,当然可以导出pdf.小编这边的需求是这样的,自己搭建的一个博客系统,基于Hexo搭建的,这个 ...

  6. curl 查看接口的网络分段响应时间

    示例如下 curl -o /dev/null -s -w %{time_namelookup}::%{time_connect}::%{time_starttransfer}::%{time_tota ...

  7. Linux发行版·常见Linux系统下载

    本专题页汇总最受欢迎的Linux发行版基本介绍和下载地址,如果您是一位刚接触Linux的新手,这里的介绍可能对您有所帮助,如果您是以为Linux使用前辈,也可以在评论处留下您宝贵意见和经验,以便让更多 ...

  8. Centos 7 下部署Django + uWSGI + Nginx

    1.废话 之前利用Django写了些测试工具,一直是直接 python manage.py runserver 8081这么来用的.用户量不大,倒也不影响什么.uWSGI+Nginx的性能肯定要好,s ...

  9. android+json+php+mysql实现用户反馈功能

    相信每个项目都会有用户反馈建议等功能,这个实现的方法很多,下面是我实现的方法,供大家交流.首先看具体界面,三个字段.名字,邮箱为选填,可以为空,建议不能为空.如有需要可以给我留言. 下面贴出布局代码, ...

  10. tip1:学习使用mybatis中使用mysql数据库的基本操作

    1.查看mysql服务是否启动: 2.root用户链接数据库:mysql -u root -p,随后输入正确的密码即可. 3.root用户创建数据库: 4.查看已建数据库:show databases ...