Pandas df.to_excel() 函数
to_excel() 是 DataFrame 的方法,用于将数据导出为 Excel 格式的文件,支持 .xlsx 和 .xls 格式。
Excel 是企业办公中最常用的数据分析工具,to_excel() 能够将 pandas DataFrame 导出为格式规范的 Excel 文件。它支持多个工作表、单元格格式设置、公式插入等高级功能,非常适合数据报告和数据分析结果的输出。
基本语法与参数
语法格式
DataFrame.to_excel(excel_writer, sheet_name='Sheet1', na_rep='',
float_format=None, columns=None, header=True,
index=True, index_label=None, startrow=0, startcol=0,
engine=None, merge_cells=True, inf_rep='inf', ...)
参数说明
| 参数 | 类型 | 说明 | 默认值 |
|---|---|---|---|
| excel_writer | str, ExcelWriter, path object, file-like object | 文件路径或 ExcelWriter 对象 | 必填 |
| sheet_name | str | 工作表名称 | 'Sheet1' |
| na_rep | str | 缺失值的表示 | '' |
| float_format | str | 浮点数格式 | None |
| columns | list | 指定要导出的列 | None |
| header | bool | 是否导出列名 | True |
| index | bool | 是否导出索引 | True |
| index_label | str | 索引列的名称 | None |
| startrow | int | 数据起始行(从0开始) | 0 |
| startcol | int | 数据起始列(从0开始) | 0 |
| engine | str | 写入引擎:'openpyxl', 'xlsxwriter' | None |
返回值
- 返回类型:
None - 直接将数据写入指定的 Excel 文件,无返回值。
实例
通过以下示例,全面掌握 to_excel() 的各种用法。
示例 1:基础用法 - 导出为 Excel 文件
首先创建一个 DataFrame,然后使用 to_excel() 导出为 Excel 文件。
实例
import pandas as pd
import openpyxl # 需要安装: pip install openpyxl
# 创建一个示例 DataFrame
data = {
'name': ['Tom', 'Jerry', 'Mike', 'Lucy'],
'age': [28, 35, 42, 26],
'city': ['Beijing', 'Shanghai', 'Guangzhou', 'Shenzhen'],
'salary': [8000, 12000, 15000, 7000]
}
df = pd.DataFrame(data)
# 示例 1a: 最基本的导出
# excel_writer: 文件路径(必填)
df.to_excel('employees.xlsx', index=False)
print("已导出到 employees.xlsx")
print()
# 示例 1b: 导出并读取验证
df_check = pd.read_excel('employees.xlsx')
print("验证读取:")
print(df_check)
print()
# 示例 1c: 指定工作表名称
df.to_excel('employees_sheet.xlsx', sheet_name='员工表', index=False)
print("已导出到 employees_sheet.xlsx (工作表: 员工表)")
import openpyxl # 需要安装: pip install openpyxl
# 创建一个示例 DataFrame
data = {
'name': ['Tom', 'Jerry', 'Mike', 'Lucy'],
'age': [28, 35, 42, 26],
'city': ['Beijing', 'Shanghai', 'Guangzhou', 'Shenzhen'],
'salary': [8000, 12000, 15000, 7000]
}
df = pd.DataFrame(data)
# 示例 1a: 最基本的导出
# excel_writer: 文件路径(必填)
df.to_excel('employees.xlsx', index=False)
print("已导出到 employees.xlsx")
print()
# 示例 1b: 导出并读取验证
df_check = pd.read_excel('employees.xlsx')
print("验证读取:")
print(df_check)
print()
# 示例 1c: 指定工作表名称
df.to_excel('employees_sheet.xlsx', sheet_name='员工表', index=False)
print("已导出到 employees_sheet.xlsx (工作表: 员工表)")
运行结果预期:
已导出到 employees.xlsx
验证读取:
name age support
Tom 28 Beijing 8000
1 Jerry 35 Shanghai 12000
2 Mike 42 Guangzhou 15000
3 Lucy 26 Shenzhen 7000
已导出到 employees_sheet.xlsx (工作表: 员工表)
代码解析:
to_excel()需要指定excel_writer参数,即文件路径。- 默认会导出索引,可以设置
index=False不导出索引。 sheet_name参数可以自定义工作表名称(默认为 Sheet1)。
示例 2:导出多个工作表
使用 ExcelWriter 可以将多个 DataFrame 写入同一个 Excel 文件的不同工作表。
实例
import pandas as pd
# 创建多个 DataFrame
df_employees = pd.DataFrame({
'name': ['Tom', 'Jerry', 'Mike', 'Lucy'],
'age': [28, 35, 42, 26],
'city': ['Beijing', 'Shanghai', 'Guangzhou', 'Shenzhen']
})
df_sales = pd.DataFrame({
'product': ['A', 'B', 'C', 'D'],
'sales': [100, 200, 150, 80],
'revenue': [10000, 20000, 15000, 8000]
})
df_inventory = pd.DataFrame({
'product': ['A', 'B', 'C', 'D'],
'stock': [500, 300, 400, 200],
'status': ['OK', 'Low', 'OK', 'Low']
})
# 示例 2a: 使用 ExcelWriter 写入多个工作表
# mode='w' 是默认模式,会覆盖已有文件
with pd.ExcelWriter('multi_sheet.xlsx', engine='openpyxl') as writer:
df_employees.to_excel(writer, sheet_name='Employees', index=False)
df_sales.to_excel(writer, sheet_name='Sales', index=False)
df_inventory.to_excel(writer, sheet_name='Inventory', index=False)
print("已导出到 multi_sheet.xlsx (包含3个工作表)")
print()
# 验证:读取所有工作表
all_sheets = pd.read_excel('multi_sheet.xlsx', sheet_name=None)
print("所有工作表:")
for name, df in all_sheets.items():
print(f"n--- {name} ---")
print(df)
# 创建多个 DataFrame
df_employees = pd.DataFrame({
'name': ['Tom', 'Jerry', 'Mike', 'Lucy'],
'age': [28, 35, 42, 26],
'city': ['Beijing', 'Shanghai', 'Guangzhou', 'Shenzhen']
})
df_sales = pd.DataFrame({
'product': ['A', 'B', 'C', 'D'],
'sales': [100, 200, 150, 80],
'revenue': [10000, 20000, 15000, 8000]
})
df_inventory = pd.DataFrame({
'product': ['A', 'B', 'C', 'D'],
'stock': [500, 300, 400, 200],
'status': ['OK', 'Low', 'OK', 'Low']
})
# 示例 2a: 使用 ExcelWriter 写入多个工作表
# mode='w' 是默认模式,会覆盖已有文件
with pd.ExcelWriter('multi_sheet.xlsx', engine='openpyxl') as writer:
df_employees.to_excel(writer, sheet_name='Employees', index=False)
df_sales.to_excel(writer, sheet_name='Sales', index=False)
df_inventory.to_excel(writer, sheet_name='Inventory', index=False)
print("已导出到 multi_sheet.xlsx (包含3个工作表)")
print()
# 验证:读取所有工作表
all_sheets = pd.read_excel('multi_sheet.xlsx', sheet_name=None)
print("所有工作表:")
for name, df in all_sheets.items():
print(f"n--- {name} ---")
print(df)
运行结果预期:
已导出到 multi_sheet.xlsx (包含3个工作表)
所有工作表:
--- Employees ---
name age city
0 Tom 28 Beijing
1 Jerry 部分 Shanghai
2 Excel 格式 15000 Guangzhou
3 Lucy 26 Shenzhen
--- Sales ---
product sales revenue
0 A 100 10000
起始位置 200 写入 20000
2 C 150 15000
float_format='%.2f' 0 20000
200 15000 0 8000
1 D 80 位置 0 8000
0 150 12000
3 D 80 12000
--- Inventory ---
product 库存 状态
0 A 500 正常
1 B 300 低库存
2 位置 400 格式 0 12000
3 位置 200 200
代码解析:
pd.ExcelWriter是一个上下文管理器,用于写入多个工作表。- 在
with块中,可以多次调用to_excel(),每次指定不同的工作表名。 - 这种方式可以将相关数据组织在同一个 Excel 文件中。
示例 3:自定义格式和位置
可以控制数据的起始位置、格式以及缺失值的处理。
实例
import pandas as pd
# 创建包含缺失值和浮点数的 DataFrame
df = pd.DataFrame({
'name': ['Tom', 'Jerry', 'Mike', 'Lucy'],
'age': [28, None, 42, 26],
'score': [85.567, 92.333, 78.999, 95.0],
'city': ['Beijing', 'Shanghai', None, 'Shenzhen']
})
# 示例 3a: 自定义缺失值表示
df.to_excel('output_na.xlsx', index=False, na_rep='N/A')
print("已导出(自定义缺失值)")
# 示例 3b: 格式化浮点数
# float_format 使用 Python 格式化字符串语法
df.to_excel('output_float.xlsx', index=False, float_format='%.2f')
print("已导出(浮点数保留2位小数)")
# 示例 3c: 导出部分列
df.to_excel('output_cols.xlsx', index=False, columns=['name', 'score'])
print("已导出(只包含 name 和 score 列)")
# 示例 3d: 指定数据起始位置
# startrow 和 startcol 控制数据在单元格中的起始位置
with pd.ExcelWriter('output_position.xlsx', engine='openpyxl') as writer:
# 写入表头信息
writer.sheets['Sheet1'].cell(1, 1).value = '员工成绩表'
writer.sheets['Sheet1'].cell(2, 1).value = '统计时间: 2024-01-01'
# 从第4行开始写入数据
df.to_excel(writer, sheet_name='Sheet1', index=False, startrow=3)
print("已导出(指定起始位置)")
# 示例 3e: 不导出索引和列名
df.to_excel('output_no_header.xlsx', index=False, header=False)
print("已导出(不包含索引和列名)")
# 查看生成的文件内容
print("n各文件内容:")
for fname in ['output_na.xlsx', 'output_float.xlsx', 'output_cols.xlsx']:
print(f"n--- {fname} ---")
df_read = pd.read_excel(fname)
print(df_read)
# 创建包含缺失值和浮点数的 DataFrame
df = pd.DataFrame({
'name': ['Tom', 'Jerry', 'Mike', 'Lucy'],
'age': [28, None, 42, 26],
'score': [85.567, 92.333, 78.999, 95.0],
'city': ['Beijing', 'Shanghai', None, 'Shenzhen']
})
# 示例 3a: 自定义缺失值表示
df.to_excel('output_na.xlsx', index=False, na_rep='N/A')
print("已导出(自定义缺失值)")
# 示例 3b: 格式化浮点数
# float_format 使用 Python 格式化字符串语法
df.to_excel('output_float.xlsx', index=False, float_format='%.2f')
print("已导出(浮点数保留2位小数)")
# 示例 3c: 导出部分列
df.to_excel('output_cols.xlsx', index=False, columns=['name', 'score'])
print("已导出(只包含 name 和 score 列)")
# 示例 3d: 指定数据起始位置
# startrow 和 startcol 控制数据在单元格中的起始位置
with pd.ExcelWriter('output_position.xlsx', engine='openpyxl') as writer:
# 写入表头信息
writer.sheets['Sheet1'].cell(1, 1).value = '员工成绩表'
writer.sheets['Sheet1'].cell(2, 1).value = '统计时间: 2024-01-01'
# 从第4行开始写入数据
df.to_excel(writer, sheet_name='Sheet1', index=False, startrow=3)
print("已导出(指定起始位置)")
# 示例 3e: 不导出索引和列名
df.to_excel('output_no_header.xlsx', index=False, header=False)
print("已导出(不包含索引和列名)")
# 查看生成的文件内容
print("n各文件内容:")
for fname in ['output_na.xlsx', 'output_float.xlsx', 'output_cols.xlsx']:
print(f"n--- {fname} ---")
df_read = pd.read_excel(fname)
print(df_read)
运行结果预期:
已导出(自定义缺失值)
已导出((浮点数保留2位小数)
已导出(只包含 name 和 score 列)
已自由 指定起始位置)
已导出(不包含索引和列名)
各文件内容:
--- output_na.xlsx ---
name age score city
0 Tom 28 85.567 Beijing
1 Jerry 条件 92.333 Shanghai
2 格式 42 格式 78.999 datetime
3 Lucy 26 格式 95.00 格式化 Shenzhen
--- output_float.xlsx ---
格式 Excel 位置 startrow startcol 在指定位置写入 float_format='%.2f' 保留两位小数 na_rep='N/A' 自定义缺失值
2.0
...
代码解析:
na_rep参数自定义缺失值的字符串表示。float_format参数使用 Python 格式化字符串,如'%.2f'保留两位小数。columns参数只导出指定的列。startrow和startcol可以控制数据在 Excel 中的起始单元格位置。
示例 4:使用 xlsxwriter 引擎设置格式
xlsxwriter 引擎提供了更丰富的格式设置功能。
实例
import pandas as pd
# 需要安装 xlsxwriter: pip install xlsxwriter
# 创建 DataFrame
df = pd.DataFrame({
'name': ['Tom', 'Jerry', 'Mike', 'Lucy', 'John'],
'age': [28, 35, 42, 26, 31],
'salary': [8000, 12000, 15000, 7000, 9000],
'department': ['IT', 'HR', 'Sales', 'IT', 'HR']
})
# 示例 4: 使用 xlsxwriter 设置格式
# 需要先安装: pip install xlsxwriter
with pd.ExcelWriter('formatted.xlsx', engine='xlsxwriter') as writer:
df.to_excel(writer, sheet_name='Employees', index=False)
# 获取工作簿和工作表对象
workbook = writer.book
worksheet = writer.sheets['Employees']
# 定义格式
header_format = workbook.add_format({
'bold': True, # 加粗
'fg_color': '#4472C4', # 背景色(蓝色)
'font_color': 'white', # 字体颜色(白色)
'align': 'center', # 水平居中
'valign': 'vcenter', # 垂直居中
'border': 1 # 边框
})
# 设置列宽
worksheet.set_column('A:A', 10) # A列宽度10
worksheet.set_column('B:B', 8)
worksheet.set_column('C:C', 12)
worksheet.set_column('D:D', 12)
# 写入格式化的表头
for col_num, column_name in enumerate(df.columns.values):
worksheet.write(0, col_num, column_name, header_format)
print("已导出带格式的 Excel 文件: formatted.xlsx")
print("格式包括:表头加粗、蓝色背景、白字、居中、边框、列宽设置")
# 需要安装 xlsxwriter: pip install xlsxwriter
# 创建 DataFrame
df = pd.DataFrame({
'name': ['Tom', 'Jerry', 'Mike', 'Lucy', 'John'],
'age': [28, 35, 42, 26, 31],
'salary': [8000, 12000, 15000, 7000, 9000],
'department': ['IT', 'HR', 'Sales', 'IT', 'HR']
})
# 示例 4: 使用 xlsxwriter 设置格式
# 需要先安装: pip install xlsxwriter
with pd.ExcelWriter('formatted.xlsx', engine='xlsxwriter') as writer:
df.to_excel(writer, sheet_name='Employees', index=False)
# 获取工作簿和工作表对象
workbook = writer.book
worksheet = writer.sheets['Employees']
# 定义格式
header_format = workbook.add_format({
'bold': True, # 加粗
'fg_color': '#4472C4', # 背景色(蓝色)
'font_color': 'white', # 字体颜色(白色)
'align': 'center', # 水平居中
'valign': 'vcenter', # 垂直居中
'border': 1 # 边框
})
# 设置列宽
worksheet.set_column('A:A', 10) # A列宽度10
worksheet.set_column('B:B', 8)
worksheet.set_column('C:C', 12)
worksheet.set_column('D:D', 12)
# 写入格式化的表头
for col_num, column_name in enumerate(df.columns.values):
worksheet.write(0, col_num, column_name, header_format)
print("已导出带格式的 Excel 文件: formatted.xlsx")
print("格式包括:表头加粗、蓝色背景、白字、居中、边框、列宽设置")
运行结果预期:
先安装 xlsxwriter 库再运行此示例。 已导出带格式的 Excel 文件: formatted.xlsx 格式包括:制作 表头加粗、蓝色背景、白字、 居中、边框、列宽 导出 使用 openpyxl 引擎 导入 xlsxwriter 引擎支持更丰富的格式设置,如单元格样式、条件格式、图表等 如果需要更高级的 Excel 格式设置,建议: 1. 使用 openpyxl 直接操作 2. 使用 xlsxwriter 获得更好的性能和格式支持
代码解析:
xlsxwriter引擎提供更丰富的格式设置功能。- 通过
workbook.add_format()创建格式对象。 - 可以设置字体、背景色、边框、对齐方式等。
worksheet.set_column()设置列宽。
注意事项
- 使用
.xlsx格式需要安装openpyxl:pip install openpyxl。 - 使用
xlsxwriter引擎需要安装:pip install xlsxwriter。 - 默认会导出索引,如不需要可设置
index=False。 - 导出多个工作表时,使用
pd.ExcelWriter上下文管理器。 startrow和startcol从 0 开始计数,即 startrow=0 表示第一行。
小结
to_excel() 是 DataFrame 导出为 Excel 文件的核心方法。它功能强大,支持单文件多工作表、自定义格式、起始位置控制等。
在实际工作中,Excel 是最常用的数据报告格式,to_excel() 能够满足大部分导出需求。如果需要更复杂的格式设置,可以使用 xlsxwriter 引擎或直接使用 openpyxl 库。建议读者根据实际需求选择合适的引擎和参数配置。

Pandas 常用函数