pandas DataFrame 导出到Excel格式美化 字体
时间: 2025-06-24 08:42:47 浏览: 22
### 使用 Pandas 和 Openpyxl 对 DataFrame 进行 Excel 导出并格式化
要将 Pandas 的 DataFrame 导出至 Excel 并进行格式美化,可以借助 `openpyxl` 库来实现更复杂的样式控制。以下是完整的解决方案:
#### 解决方案概述
1. **使用 `pd.ExcelWriter`**:指定 `engine='openpyxl'` 来启用高级功能。
2. **自定义单元格样式**:利用 `openpyxl.styles` 模块中的类(如 Font、Alignment 等)设置字体大小、颜色和其他属性。
3. **调整列宽**:遍历每一列的数据和标题,动态计算适合的列宽。
---
#### 示例代码
以下是一个综合性的 Python 脚本,展示如何导出带有样式的 Excel 文件:
```python
import pandas as pd
from openpyxl import Workbook
from openpyxl.utils.dataframe import dataframe_to_rows
from openpyxl.styles import Font, Alignment, PatternFill, Border, Side
def export_and_format_excel(df, output_path):
"""
将 DataFrame 导出为带样式的 Excel 文件
参数:
df (pd.DataFrame): 输入的 DataFrame
output_path (str): 输出文件路径
"""
# 创建工作簿对象
wb = Workbook()
ws = wb.active
ws.title = "Formatted Data"
# 将 DataFrame 写入工作表
for r_idx, row in enumerate(dataframe_to_rows(df, index=False, header=True), start=1):
for c_idx, value in enumerate(row, start=1):
cell = ws.cell(row=r_idx, column=c_idx, value=value)
# 设置标题行样式
if r_idx == 1:
cell.font = Font(bold=True, color="FFFFFF") # 白色加粗字体
cell.fill = PatternFill(start_color="0000FF", end_color="0000FF", fill_type="solid") # 蓝色背景
cell.alignment = Alignment(horizontal="center")
# 设置其他行样式
else:
cell.border = Border(
left=Side(style='thin'),
right=Side(style='thin'),
top=Side(style='thin'),
bottom=Side(style='thin')
)
# 动态调整列宽
for col in ws.columns:
max_length = max(len(str(cell.value)) for cell in col)
adjusted_width = (max_length + 2) * 1.2 # 增加一些额外空间
ws.column_dimensions[col[0].column_letter].width = min(adjusted_width, 50) # 列宽上限设为50
# 保存文件
wb.save(output_path)
# 测试数据
data = {
'Name': ['Alice', 'Bob', 'Charlie'],
'Age': [25, 30, 35],
'City': ['New York', 'London', 'Paris']
}
df = pd.DataFrame(data)
# 导出到 Excel
export_and_format_excel(df, 'styled_output.xlsx')
```
---
#### 关键点解析
1. **Font 样式**
- 使用 `Font()` 类来自定义字体的颜色、大小、加粗等效果[^4]。
2. **PatternFill**
- 提供填充颜色的功能,支持多种模式(如纯色填充)。这里设置了蓝色背景用于突出显示标题行[^4]。
3. **Border 边框**
- 统一给表格内的每个单元格添加细边框,增强视觉一致性[^4]。
4. **自动调整列宽**
- 计算每列中字符串长度的最大值,并在此基础上增加一定比例的空间作为缓冲区。
5. **冻结窗格**
如果需要固定顶部标题栏以便滚动查看数据时始终可见,则可以通过如下方式实现:
```python
ws.freeze_panes = 'A2'
```
---
#### 注意事项
- 上述脚本依赖于 `openpyxl` 库,请确保已安装该库 (`pip install openpyxl`)。
- 若需进一步优化性能或处理大数据集,考虑分批写入以及内存管理策略[^4]。
---
阅读全文
相关推荐



















