2021-07-04 pandas ExcelWriter的mode writer = pd.ExcelWriter(filedir, mode=‘a’, engine=‘openpyxl’)

pandas ExcelWriter的mode
import pandas as pd
writer = pd.ExcelWriter(filedir, mode=‘a’, engine=‘openpyxl’)
说明文档里只写了mode有2个值,w,a,默认是w,没有更多解释。
经过尝试发现用法如下:
1.只写w,会每次创建新文件,如果filedir存在则直接覆盖,会丢失数据。
2.只写a,如果filedir不存在就会报错。存在的话可以往文件里追加写入数据,原数据会保留。
3.可以写a+,如果filedir不存在则会创建,并支持追加写入创建的sheet;但如果filedir存在,依然会覆盖原有sheet,跟w的作用一样了。这是败笔,按其他语言的惯例,a+应该是可以在原有文件数据上追加写入。 写w+也没用,写wa也没用,都跟w的作用一样。
4.所以要想往一个文件里追加写入数据,且会追加到不同的sheet,只有分两步:先创建文件(用w, a+都可以),再用模式a来追加写入,没法一步达成。

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

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

  File "", line 1, in
    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!
1
2
3
4
5
6
7
8
9
10
原因是现在常用的写入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")
    
1
2
3
4
5
6
7
8
9
10
结果如下:

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

你可能感兴趣的:(2021-07-04 pandas ExcelWriter的mode writer = pd.ExcelWriter(filedir, mode=‘a’, engine=‘openpyxl’))