Python Pandas实现dataframe导出为Excel 2007格式的文件并设置合适的列宽度

Python Pandas实现dataframe导出为Excel 2007格式的文件,并且针对每一列的数据调整到合适宽度,并封装为函数。

此函数能够有效处理大多数情况下的列宽调整需求,确保Excel文件内容清晰易读。

将Pandas DataFrame导出为Excel 2007+格式(.xlsx)并自动调整列宽,可以使用以下函数。该函数会处理索引列和数据列,确保每列宽度适合内容。

python 复制代码
import pandas as pd
from openpyxl.utils import get_column_letter

def export_to_excel(df, filename, index=False, sheet_name='Sheet1'):
    """
    将DataFrame导出为Excel文件,并自动调整列宽。
    
    参数:
    df (pd.DataFrame): 要导出的数据框
    filename (str): 导出的Excel文件路径
    index (bool): 是否包含索引,默认为False
    sheet_name (str): 工作表名称,默认为'Sheet1'
    """
    with pd.ExcelWriter(filename, engine='openpyxl') as writer:
        df.to_excel(writer, index=index, sheet_name=sheet_name)
        worksheet = writer.sheets[sheet_name]
        
        columns_info = []
        
        # 处理索引列
        if index:
            index_name = str(df.index.name) if df.index.name is not None else ''
            index_header_len = len(index_name)
            index_data = df.index.to_series().astype(str)
            index_data_len = index_data.str.len().max() if not index_data.empty else 0
            columns_info.append((index_header_len, index_data_len))
        
        # 处理数据列
        for col in df.columns:
            col_header_len = len(str(col))
            col_data = df[col].fillna('').astype(str)
            col_data_len = col_data.str.len().max() if not col_data.empty else 0
            columns_info.append((col_header_len, col_data_len))
        
        # 调整列宽
        for i, (header_len, data_len) in enumerate(columns_info):
            max_len = max(header_len, data_len)
            adjusted_width = max_len * 1.2 + 2  # 调整系数和缓冲
            col_letter = get_column_letter(i + 1)
            worksheet.column_dimensions[col_letter].width = adjusted_width

使用示例:

python 复制代码
# 示例数据
data = {
    'Name': ['Alice', 'Bob', 'Charlie'],
    'Age': [25, 30, 35],
    'Description': ['A long description', 'Short', None]
}
df = pd.DataFrame(data)
df.index.name = 'ID'

# 导出到Excel,包含索引
export_to_excel(df, 'output.xlsx', index=True, sheet_name='Data')

说明:

  1. 依赖库 :确保安装了pandasopenpyxl,可通过pip install pandas openpyxl安装。
  2. 功能
    • 导出DataFrame到Excel 2007+格式(.xlsx)。
    • 自动调整所有列(包括索引列)的宽度,基于标题和数据的最大长度。
    • 使用openpyxl引擎处理Excel文件。
  3. 参数
    • df: 待导出的DataFrame。
    • filename: 输出文件路径。
    • index: 是否包含索引,默认不包含。
    • sheet_name: 工作表名称,默认为"Sheet1"。
  4. 调整逻辑
    • 计算每列标题和数据的最大长度。
    • 列宽计算公式:max_length * 1.2 + 2,可根据需求调整系数。
相关推荐
数据智能老司机5 小时前
精通 Python 设计模式——分布式系统模式
python·设计模式·架构
数据智能老司机6 小时前
精通 Python 设计模式——并发与异步模式
python·设计模式·编程语言
数据智能老司机6 小时前
精通 Python 设计模式——测试模式
python·设计模式·架构
数据智能老司机6 小时前
精通 Python 设计模式——性能模式
python·设计模式·架构
c8i6 小时前
drf初步梳理
python·django
每日AI新事件6 小时前
python的异步函数
python
这里有鱼汤7 小时前
miniQMT下载历史行情数据太慢怎么办?一招提速10倍!
前端·python
databook17 小时前
Manim实现脉冲闪烁特效
后端·python·动效
程序设计实验室17 小时前
2025年了,在 Django 之外,Python Web 框架还能怎么选?
python
倔强青铜三19 小时前
苦练Python第46天:文件写入与上下文管理器
人工智能·python·面试