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,可根据需求调整系数。
相关推荐
努力的lpp20 分钟前
php反序列化一(大白话版)
开发语言·web安全·php·ctf·反序列化
菜鸟~noob23328 分钟前
【电子战】第03篇:CFAR(恒虚警)处理【含matlab代码】
开发语言·matlab
泡海椒1 小时前
内置SPI函数库详解:JQuick-Java Builtin工具类实战用法
java·开发语言·python
hqyjzsb1 小时前
零 AI 项目经验,学 Python 转型 AI 的正确顺序是什么?
开发语言·人工智能·python·算法·职场和发展·数据挖掘·数据分析
sanjiaomao3332 小时前
从论文公式到Python实现:用单元测试校验滑动平均算法
python·算法·单元测试
Keven_112 小时前
算法札记:ACM适用的很骚的C++语法(持续更新)
开发语言·c++
脉动数据行情13 小时前
C# 实现德指 DAX 期货 WebSocket 实时行情监听
开发语言·websocket·c#
大圣编蚕3 小时前
Java ByteArrayInputStream 详解:从入门到实战
java·开发语言·算法
菜鸟~noob2333 小时前
【电子战】第02篇:能量检测器 vs. 相关检测器【含matlab代码】
开发语言·matlab
linweidong4 小时前
中科闻歌Java面试题及参考答案
java·python·大模型·提示词·ai agent·mcp·rag原理