pandas.ExcelWriter#

class pandas.ExcelWriter(path, engine=None, date_format=None, datetime_format=None, mode='w', storage_options=None, if_sheet_exists=None, engine_kwargs=None)[源代码][源代码]#

用于将 DataFrame 对象写入 excel 表格的类。

默认使用:

  • 如果安装了 xlsxwriter,则使用 xlsxwriter 处理 xlsx 文件,否则使用 openpyxl

  • odf 用于 ods 文件

请参阅 DataFrame.to_excel() 以获取典型用法。

写入器应作为上下文管理器使用。否则,调用 close() 以保存并关闭任何已打开的文件句柄。

参数:
路径str 或 typing.BinaryIO

指向 xls 或 xlsx 或 ods 文件的路径。

引擎str (可选)

用于编写的引擎。如果为 None,则默认为 io.excel.<extension>.writer。注意:只能作为关键字参数传递。

date_formatstr, 默认为 None

写入Excel文件的日期格式字符串(例如 ‘YYYY-MM-DD’)。

datetime_formatstr, 默认为 None

写入Excel文件的datetime对象的格式字符串。(例如 ‘YYYY-MM-DD HH:MM:SS’)。

模式{‘w’, ‘a’}, 默认 ‘w’

使用的文件模式(写入或追加)。追加模式不适用于 fsspec URL。

storage_optionsdict, 可选

特定存储连接有意义的额外选项,例如主机、端口、用户名、密码等。对于HTTP(S) URL,键值对被转发到 urllib.request.Request 作为头部选项。对于其他URL(例如以“s3://”和“gcs://”开头),键值对被转发到 fsspec.open。请参阅 fsspecurllib 了解更多详情,有关存储选项的更多示例请参考 这里

if_sheet_exists{‘error’, ‘new’, ‘replace’, ‘overlay’},默认 ‘error’

在尝试写入已经存在的表格时如何表现(仅限追加模式)。

  • 错误:引发一个 ValueError。

  • new: 创建一个新表单,名称由引擎决定。

  • replace: 在写入之前删除工作表的内容。

  • overlay: 将内容写入现有工作表,而不首先删除,但可能覆盖现有内容。

Added in version 1.3.0.

在 1.4.0 版本发生变更: 添加了 overlay 选项

engine_kwargsdict, 可选

要传递给引擎的关键字参数。这些将被传递给各个引擎的以下函数:

  • xlsxwriter: xlsxwriter.Workbook(file, **engine_kwargs)

  • openpyxl(写模式):openpyxl.Workbook(**engine_kwargs)

  • openpyxl(追加模式):openpyxl.load_workbook(file, **engine_kwargs)

  • odf: odf.opendocument.OpenDocumentSpreadsheet(**engine_kwargs)

Added in version 1.3.0.

参见

read_excel

将 Excel 表格值 (xlsx) 文件读取到 DataFrame 中。

read_csv

将逗号分隔值(csv)文件读取到 DataFrame 中。

read_fwf

将固定宽度格式化的行读取到 DataFrame 中。

注释

为了与CSV写入器兼容,ExcelWriter 在写入之前将列表和字典序列化为字符串。

例子

默认用法:

>>> df = pd.DataFrame([["ABC", "XYZ"]], columns=["Foo", "Bar"])  
>>> with pd.ExcelWriter("path_to_file.xlsx") as writer:
...     df.to_excel(writer)  

要在单个文件中写入不同的工作表:

>>> df1 = pd.DataFrame([["AAA", "BBB"]], columns=["Spam", "Egg"])  
>>> df2 = pd.DataFrame([["ABC", "XYZ"]], columns=["Foo", "Bar"])  
>>> with pd.ExcelWriter("path_to_file.xlsx") as writer:
...     df1.to_excel(writer, sheet_name="Sheet1")  
...     df2.to_excel(writer, sheet_name="Sheet2")  

你可以设置日期格式或日期时间格式:

>>> 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 pd.ExcelWriter(
...     "path_to_file.xlsx",
...     date_format="YYYY-MM-DD",
...     datetime_format="YYYY-MM-DD HH:MM:SS",
... ) as writer:
...     df.to_excel(writer)  

你也可以追加到现有的 Excel 文件中:

>>> with pd.ExcelWriter("path_to_file.xlsx", mode="a", engine="openpyxl") as writer:
...     df.to_excel(writer, sheet_name="Sheet3")  

在这里,可以将 if_sheet_exists 参数设置为替换已存在的表单:

>>> with pd.ExcelWriter(
...     "path_to_file.xlsx",
...     mode="a",
...     engine="openpyxl",
...     if_sheet_exists="replace",
... ) as writer:
...     df.to_excel(writer, sheet_name="Sheet1")  

你也可以将多个 DataFrame 写入同一个工作表。注意 if_sheet_exists 参数需要设置为 overlay

>>> with pd.ExcelWriter(
...     "path_to_file.xlsx",
...     mode="a",
...     engine="openpyxl",
...     if_sheet_exists="overlay",
... ) as writer:
...     df1.to_excel(writer, sheet_name="Sheet1")
...     df2.to_excel(writer, sheet_name="Sheet1", startcol=3)  

你可以在内存中存储 Excel 文件:

>>> import io
>>> df = pd.DataFrame([["ABC", "XYZ"]], columns=["Foo", "Bar"])
>>> buffer = io.BytesIO()
>>> with pd.ExcelWriter(buffer) as writer:
...     df.to_excel(writer)

你可以将 Excel 文件打包成 zip 压缩包:

>>> import zipfile  
>>> df = pd.DataFrame([["ABC", "XYZ"]], columns=["Foo", "Bar"])  
>>> with zipfile.ZipFile("path_to_file.zip", "w") as zf:
...     with zf.open("filename.xlsx", "w") as buffer:
...         with pd.ExcelWriter(buffer) as writer:
...             df.to_excel(writer)  

你可以指定额外的参数给底层引擎:

>>> with pd.ExcelWriter(
...     "path_to_file.xlsx",
...     engine="xlsxwriter",
...     engine_kwargs={"options": {"nan_inf_to_errors": True}},
... ) as writer:
...     df.to_excel(writer)  

在追加模式下,engine_kwargs 被传递给 openpyxl 的 load_workbook

>>> with pd.ExcelWriter(
...     "path_to_file.xlsx",
...     engine="openpyxl",
...     mode="a",
...     engine_kwargs={"keep_vba": True},
... ) as writer:
...     df.to_excel(writer, sheet_name="Sheet2")  

属性

book

书籍实例。

date_format

写入Excel文件的日期格式字符串(例如 'YYYY-MM-DD')。

datetime_format

写入Excel文件的日期格式字符串(例如 'YYYY-MM-DD')。

引擎

引擎的名称。

if_sheet_exists

在追加模式下写入已存在的表格时的行为方式。

工作表

工作表名称到工作表对象的映射。

supported_extensions

写入引擎支持的扩展。

方法

check_extension(ext)

检查路径的扩展名是否与写入器支持的扩展名匹配。

关闭()

同义词为保存,使其更像文件