pandas 读取excel、一次性写入多个sheet、原有文件追加sheet

本文全部操作只需要引入pandas包即可

import pandas as pd

一、生成excel文件

首先构造pandas的DataFrame数据:

data = pd.DataFrame(
    {"col1":[1, 2, 3], 
     "col2":[4, 5, 6], 
     "col3":[7, 8, 9]
     }
    )

数据如下:

In [01]:data
Out[01]: 
   col1  col2  col3
0     1     4     7
1     2     5     8
2     3     6     9

这跟excel的行列展示极为相似。
然后就是使用pandas的to_excel方法生成excel文件并将该内容写入该excel文件:

data.to_excel("excel 样例.xlsx", index=False)

因为index的选项为False,所以没有将索引写入,结果如下:
1.0同时还可以指定sheet名称、是否展示列名等其他操作,具体可见官网参数说明

二、读取excel文件

使用pandas 的read_excel方法

data = pd.read_excel("excel 样例.xlsx")

结果与上面创建的结果一样

In [01]:data
Out[01]: 
   col1  col2  col3
0     1     4     7
1     2     5     8
2     3     6     9

这是最简单的读取excel,同样可以参考官网的参数说明来进行参数设置,指定sheet_name,表头等其他操作。
excel数据里经常会有数据说明、合并项等不需要读取或影响读取数据的单元格,比如下面的样例数据:
样例数据那么就要进行表头的设置、初始行的设置、sheet的选择:

data1 = pd.read_excel("excel 样例 1.xlsx", sheet_name="数据", header=2, usecols="B:E")

使用sheet_name参数指定sheet名称,使用header指定第2行为表头(从第0行开始),使用usecols指定列对应的位置,结果与上面的数据结果一致。

In [01]:data
Out[01]: 
   col1  col2  col3
0     1     4     7
1     2     5     8
2     3     6     9

三、一次性插入多个sheet数据

将DataFrame数据写进excel文件中使用的还是文章开头的to_excel方法,但是需要添加引擎writer,如下所示:

data = pd.DataFrame(
    {"col1":[1, 2, 3], 
     "col2":[4, 5, 6], 
     "col3":[7, 8, 9]
     }
    )
writer = pd.ExcelWriter("excel 样例.xlsx")
data.to_excel(writer, sheet_name="这是第一个sheet")
data.to_excel(writer, sheet_name="这是第二个sheet")
data.to_excel(writer, sheet_name="这是第三个sheet")
writer.save()
writer.close()

使用pd.ExcelWriter生成writer,然后就可将数据写入该excel文件了,但是写完之后必须要writer.save()writer.close(),否则数据仍然只在数据流中,并没保存到excel文件中,或者使用with as 魔术方法,这样就会在数据写入完后自动保存并关闭句柄:

with pd.ExcelWriter("excel 样例.xlsx") as writer:
	data.to_excel(writer, sheet_name="这是第一个sheet")
	data.to_excel(writer, sheet_name="这是第二个sheet")
	data.to_excel(writer, sheet_name="这是第三个sheet")

写入的结果如下:
数据样例

注意此操作会将原文件内容覆盖掉,如想追加数据请看下章节

四、追加sheet内容

按照官网的示例使用writer = pd.ExcelWriter("excel 样例.xlsx", mode='a')就能插入sheet,而不是覆盖原文件,然而我进行该操作之后就报错了:

In [1]:writer = pd.ExcelWriter("excel 样例.xlsx", mode='a')
Traceback (most recent call last):

  File "<ipython-input-75-8f1e772ce767>", line 1, in <module>
    writer = pd.ExcelWriter("excel 样例.xlsx", mode='a')

  File "D:\anaconda\lib\site-packages\pandas\io\excel\_xlsxwriter.py", line 177, in __init__
    raise ValueError("Append mode is not supported with xlsxwriter!")

ValueError: Append mode is not supported with xlsxwriter!

原因是现在常用的写入excel模块是openpyxl和xlsxwriter,pd.ExcelWriter方法默认是xlsxwriter,但是xlsxwriter不支持append操作,具体解释可以参考这篇博文。因此我们只需要更改模块就行:

data = pd.DataFrame(
       {"col1":[1, 2, 3], 
        "col2":[4, 5, 6], 
        "col3":[7, 8, 9]
        }
       )
with pd.ExcelWriter("excel 样例.xlsx", mode='a', engine='openpyxl') as writer:
       data.to_excel(writer, sheet_name="这是追加的第1个sheet")
       data.to_excel(writer, sheet_name="这是追加的第2个sheet")
    

结果如下:
样例数据
最后,还有个原sheet追加内容我没有写入,不写的原因是因为这样的需求太少了,如果实在是有这个需求我也可以通过读取该sheet内容然后使用pd.concat合并数据最后再写入。

  • 64
    点赞
  • 206
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值