HOWTO · Pandas
将 Pandas DataFrame 导出到 Excel 文件
本教程介绍了有关如何将 Pandas DataFrame 导出到 excel 文件的各种方法
本页内容
使用 Pandas 的 DataFrame.to_excel() 将 DataFrame 导出到 Excel 工作簿。如果不希望将行标签写成工作表中的一列,请设置 index=False。需要将多个表格写入同一个工作簿或配置写入引擎时,可以使用 ExcelWriter。
使用 to_excel() 将 DataFrame 导出到 Excel 文件
调用 to_excel() 并传入文件名,即可保存一个 DataFrame。默认情况下,Pandas 会将 DataFrame 的索引写入工作表的第一列;如果工作表只应包含 DataFrame 中命名的数据列,请传入 index=False。可在 DataFrame.to_excel() 参考文档中查看可用选项。
此示例创建一个简单的销售表,并将其数据列写入当前工作目录下的 sales.xlsx。对于 .xlsx 文件,Pandas 会选择已安装的 Excel 写入引擎;如果环境中尚未提供引擎,请安装 openpyxl 或 XlsxWriter 等受支持的引擎。
import pandas as pd
sales = pd.DataFrame(
{
"product": ["Keyboard", "Mouse"],
"units": [12, 25],
}
)
sales.to_excel("sales.xlsx", index=False)
print("Saved sales.xlsx")
Saved sales.xlsx
保存的工作簿包含 product 和 units 两列,不会额外写入索引列。这些列标签在未更改的示例中保持英文。若要包含行标签,请省略 index=False。相对文件名会根据进程的当前工作目录解析;若要将文件保存到其他位置,请提供绝对路径或包含目录的路径。
应根据电子表格的用途选择索引设置。如果 DataFrame 索引包含有意义的行标签(例如尚未存入某一列的标识符),请保留索引。如果读者只需查看命名的数据列,或者其他系统要求固定的表头集合,则可关闭索引。每次调用 to_excel() 时都可以设置此选项,包括通过 ExcelWriter 进行的调用。
请选择进程有权写入的路径;如果目标父目录尚不存在,请先创建它。Pandas 会写入工作簿文件,但不会创建缺失的目录。你也可以传入完整路径,使保存位置不受脚本启动目录影响。无论从编辑器、Notebook 还是计划任务运行代码,这些设置都有助于找到生成的工作簿。
使用 ExcelWriter 写入 DataFrame
如果需要控制工作簿的创建过程或写入多个 DataFrame,可以将 ExcelWriter 用作上下文管理器。代码块结束时,上下文管理器会关闭并完成工作簿。默认情况下,Pandas 会选择已安装的 Excel 写入引擎;如有需要,请安装 openpyxl 或 XlsxWriter 等受支持的引擎。
import pandas as pd
students = pd.DataFrame(
{
"student": ["Sam", "Ali", "Sara"],
"marks": [88, 93, 79],
}
)
with pd.ExcelWriter("student-results.xlsx") as writer:
students.to_excel(writer, sheet_name="Results", index=False)
print("Saved student-results.xlsx")
Saved student-results.xlsx
写入器通过 to_excel() 接收 DataFrame,而 sheet_name 用于设置工作表标签。请使用上下文管理器,而不要直接调用写入器的 save() 方法;即使代码块提前退出,上下文管理器也会负责完成写入。除非指定其他路径,否则文件会保存到当前工作目录。
将多个 DataFrame 导出到不同的 Excel 工作表
将同一个 ExcelWriter 对象传给每个 DataFrame 的 to_excel() 调用,即可把多个表格写入同一个工作簿。为每次调用指定不同的 sheet_name,读者就能在各自的工作表中找到对应表格。下面的示例将三个学科表格写入同一个工作簿;运行它需要 Pandas 和已安装的 Excel 写入引擎。
import pandas as pd
science = pd.DataFrame({"student": ["Ali", "Umar"], "score": [88, 60]})
computing = pd.DataFrame({"student": ["Ali", "Umar"], "score": [73, 63]})
arts = pd.DataFrame({"student": ["Ali", "Umar"], "score": [95, 63]})
with pd.ExcelWriter("student-results.xlsx") as writer:
science.to_excel(writer, sheet_name="Science", index=False)
computing.to_excel(writer, sheet_name="Computing", index=False)
arts.to_excel(writer, sheet_name="Arts", index=False)
print("Saved student-results.xlsx with three worksheets")
Saved student-results.xlsx with three worksheets
这三次调用都指向同一个工作簿,工作表名称由各自的 sheet_name 值决定。请为工作表设置不同的名称,并遵守 Excel 对工作表名称的限制。如果 Pandas 提示没有可用的 Excel 写入引擎,请在运行脚本的环境中安装 openpyxl 或 XlsxWriter 等受支持的引擎。