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,可根据需求调整系数。
相关推荐
Volunteer Technology16 小时前
携程智能体项目
人工智能·python·numpy
平安的平安16 小时前
Python实现RAG检索增强生成:让大模型拥有你的私有知识库
开发语言·python
昵称小白16 小时前
栈与单调栈专题
开发语言·算法
code bean16 小时前
【LangChain】少样本提示(Few-Shot Prompting)实战指南
开发语言·python·langchain
心.c16 小时前
RAG文档解析 - pypdf、LlamaParse、DeepDoc、SimpleDirectoryReader到底怎么选?
python·算法·ai
AI人工智能+电脑小能手16 小时前
【大白话说Java面试题 第42题】【JVM篇】第2题:JVM内存模型有哪些组成部分?
java·开发语言·jvm·面试
yqcoder16 小时前
深入理解 JavaScript:什么是可迭代对象 (Iterable)?
开发语言·javascript·网络
破阵子4432816 小时前
如何用 Claude Code 等 Agent 工具操作 MATLAB(支持代码编写及 Simulink)
开发语言·matlab
AI人工智能+电脑小能手16 小时前
【大白话说Java面试题 第43题】【JVM篇】第3题:GC分为哪两种?Young GC 和 Full GC有什么区别?
java·开发语言·jvm·后端·面试
得闲喝茶16 小时前
SQL处理数据的常用语法语句
数据库·笔记·sql·数据分析·excel