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 ,则默认为 xlsx 文件使用
xlsxwriter,否则使用 openpyxl 。ods 文件使用 odswriter 。
请参阅
DataFrame.to_excel获取典型用法。Writer 应作为上下文管理器使用。否则,请调用 close() 来保存并关闭任何已打开的文件句柄。
- Parameters:
- pathstr 或 typing.BinaryIO
xls、xlsx 或 ods 文件的路径。
- enginestr(可选)
用于写入的引擎。如果为 None,则默认为
io.excel.<extension>.writer。 注意:只能作为关键字参数传递。- date_formatstr,默认 None
写入 Excel 文件时日期的格式字符串(例如 ‘YYYY-MM-DD’)。
- datetime_formatstr,默认 None
写入 Excel 文件时 datetime 对象的格式字符串(例如 ‘YYYY-MM-DD HH:MM:SS’)。
- mode{‘w’, ‘a’},默认为 ‘w’
要使用的文件模式(写入或追加)。追加模式不能与 fsspec URL 一起使用。
- storage_optionsdict, 可选
适用于特定存储连接的额外选项,例如主机、端口、用户名、密码等。对于 HTTP(S) URL,键值对将作为标头选项转发给
urllib.request.Request。对于其他 URL(例如,以 “s3://”, 和 “gcs://” 开头的 URL),键值对将转发给fsspec.open。更多详情请参阅fsspec和urllib,有关存储选项的更多示例,请参阅 here 。- if_sheet_exists{‘error’, ‘new’, ‘replace’, ‘overlay’},默认为 ‘error’
尝试写入已存在的 Sheet 时如何处理(仅限追加模式)。
error:引发 ValueError。
new:创建一个新 Sheet,名称由引擎确定。
replace:在向 Sheet 写入内容之前,删除其内容。
overlay:在不先删除现有内容的情况下,向现有 Sheet 写入内容,但可能会覆盖部分现有内容。
在 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)odswriter:
odf.opendocument.OpenDocumentSpreadsheet(**engine_kwargs)
在 1.3.0 版本加入.
Notes
为了与 CSV writer 兼容,ExcelWriter 在写入前会将列表和字典序列化为字符串。
Examples
默认用法:
>>> df = pd.DataFrame([["ABC", "XYZ"]], columns=["Foo", "Bar"]) >>> with pd.ExcelWriter("path_to_file.xlsx") as writer: ... df.to_excel(writer)
将内容写入单个文件中的不同 Sheet:
>>> 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")
您可以设置日期格式或 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 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 参数设置为
replace,如果 Sheet 已存在则替换它:>>> with ExcelWriter( ... "path_to_file.xlsx", ... mode="a", ... engine="openpyxl", ... if_sheet_exists="replace", ... ) as writer: ... df.to_excel(writer, sheet_name="Sheet1")
您还可以将多个 DataFrame 写入同一个 Sheet。请注意,
if_sheet_exists参数需要设置为overlay:>>> with 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")
Attributes
bookBook 实例。
date_format写入 Excel 文件时日期的格式字符串(例如 'YYYY-MM-DD')。
datetime_format写入 Excel 文件时日期的格式字符串(例如 'YYYY-MM-DD')。
engine引擎名称。
if_sheet_exists在追加模式下写入已存在的 Sheet 时如何处理。
sheetsSheet 名称到 Sheet 对象的映射。
supported_extensionsWriter 引擎支持的扩展名。
Methods
check_extension(ext)检查路径的扩展名是否在 Writer 的支持的扩展名列表中。
close()save 的同义词,使其更像文件对象。