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. 依赖库 :确保安装了pandas和openpyxl,可通过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,可根据需求调整系数。
相关推荐
夏幻灵3 小时前
JavaScript this 面试:五种绑定规则、优先级与常见面试陷阱
开发语言·javascript·面试
程序猿编码3 小时前
榨干 RTX5090 算力!Qwen3 专用单卡推理引擎,手写C++/CUDA 算子实现 MTP 推测解码
开发语言·c++·大模型推理·qwen3·多模态推理
bkspiderx4 小时前
Qt 插件机制:动态扩展应用功能的核心框架
开发语言·qt·元数据·qt 插件·qpluginloader
程序员老陆5 小时前
深入理解 C++ thread_local:线程私有存储的正确打开方式
开发语言·c++·程序设计
沐晓时光5 小时前
C语言入门,深入理解指针(3)
c语言·开发语言
码云数智-园园5 小时前
unique_ptr 还是 shared_ptr?C++ 智能指针选型与内存泄漏实战分析
java·开发语言
禾小西6 小时前
07丨Redis 哨兵机制:主库故障后,如何恢复服务?
java·开发语言·redis
我不是阵雨6 小时前
JDK 21虚拟线程Pinning陷阱:一文拔钉解困
java·开发语言
全栈练习生6 小时前
AI Agent 沙箱
python·ai
徐小黑ACG7 小时前
Golang 基础05 结构体struct
开发语言·算法·golang