解决Pandas生成Excel时的sheet问题的方法总结_第1页
解决Pandas生成Excel时的sheet问题的方法总结_第2页
解决Pandas生成Excel时的sheet问题的方法总结_第3页
解决Pandas生成Excel时的sheet问题的方法总结_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第解决Pandas生成Excel时的sheet问题的方法总结目录楔子同时导入多个sheet覆盖一个sheet

楔子

估计有不少小伙伴在将DataFrame导入到Excel的时候,都遇到过下面这种尴尬的情况:

想将多个DataFrame导入到一个Excel文件的多个sheet中,但是却发现生成的Excel文件里面只有最后一个sheet;想给一个现有的Excel文件追加一个sheet,结果发现其它的sheet都没了,只剩下新追加的sheet;

那么下面就来看看如何解决这些问题。

同时导入多个sheet

如果想导入多个sheet,那么肯定不能使用原来to_excel(文件名)的方式,那样只会保留最后一个sheet。我们应该使用类ExcelWriter实现:

import

pandas

as

pd

df1

=

pd.DataFrame({"a":

[1,

2],

"b":

[3,

4]})

df2

=

pd.DataFrame({"a":

[2,

3],

"b":

[4,

5]})

df3

=

pd.DataFrame({"a":

[3,

4],

"b":

[5,

6]})

#

调用pd.ExcelWriter,

需要指定mode="a",

engine="openpyxl"

#

注意:

将mode设置为"a"表示追加,

但是它要求文件必须存在,

否则报错

writer

=

pd.ExcelWriter("test.xlsx",

mode="a",

engine="openpyxl")

#

因此我们需要生成这个文件,此时顺便将第一个

DataFrame

导进去

df1.to_excel("test.xlsx",

index=False,

sheet_name="a")

#

然后再实例化ExcelWriter

writer

=

pd.ExcelWriter("test.xlsx",

mode="a",

engine="openpyxl")

#

接下来还是调用to_excel,

但是第一个参数不再是文件名,

而是上面的writer

#

将剩下的两个DataFrame写进去

df2.to_excel(writer,

index=False,

sheet_name="b")

df3.to_excel(writer,

index=False,

sheet_name="c")

#

保存并关闭writer,

写入磁盘

writer.save()

writer.close()

执行代码,然后打开文件看一下。

此时我们看到结果是没有问题的,当然向已存在的Excel文件追加sheet也是同理。

覆盖一个sheet

向Excel文件同时写入多个sheet,以及追加sheet,我们已经知道该怎么做了,然后是覆盖sheet。首先我们覆盖sheet的时候还要保证其它sheet不受影响,所以mode仍然要设置为追加模式。

下面问题来了,我们上面的Excel文件有a、b、c三个sheet,假设我们想将b这个sheet覆盖掉,应该怎么做呢?可能有人认为,在追加的时候还指定sheet_name=b不就行了,然鹅答案是不行的。

我们看到如果已有同名sheet,那么不会覆盖,还是创建一个新的sheet,并自动在结尾处加一个1。如果我们在此基础上再写入b这个sheet的话,那么又会多出一个名为b2的sheet。所以最好的办法是,在导入之前先将sheet删除。

import

pandas

as

pd

writer

=

pd.ExcelWriter("test.xlsx",

mode="a",

engine="openpyxl")

wb

=

writer.book

#

pandas操作Excel底层也是依赖于其它的模块,

比如xlrd、openpyxl

#

所以这里的

wb

=

writer.book

就相当于

from

openpyxl

import

load_workbook

wb

=

load_workbook("test.xlsx")

#

查看已存在的所有的sheet,

总共是5个

#

其中

"b1"和"b2"

是自动创建的

print(wb.sheetnames)

#

['a',

'b',

'c',

'b1',

'b2']

#

下面我们来删除sheet

wb.remove(wb["b1"])

wb.remove(wb["b2"])

wb.remove(wb["b"])

df

=

pd.DataFrame({"name":

["古明地觉",

"古明地恋"]})

#

我们将

b

这个

sheet

给删除了

#

所以再导入

"b"

的时候就不会出现

"b3"

#

当然

"b1"

"b2"

也顺便被我们给删掉了

df.to_excel(writer,

index=True,

sheet_name="b")

writer.save()

writer.close()

我们看到b1、b2两个sheet就没了,当然我们删除的还有b这个sheet,只不过又重新创建了,当然数据也是我们创建的新数据。

另外可能有人发现多个sheet的顺序不再是原来的a、b、c,这是因为在删除b之后,a和c就靠在一

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论