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,可根据需求调整系数。
相关推荐
PfCoder1 小时前
C#的判断语句总结
开发语言·c#·visual studio·winform
好看资源平台2 小时前
Java/Kotlin逆向基础与Smali语法精解
java·开发语言·kotlin
zimoyin2 小时前
解决 Java/Kotlin 资源加载问题
java·python·kotlin
wjcroom2 小时前
数字投屏叫号器-发射端python窗口定制
开发语言·python
静候光阴2 小时前
python使用venv命令创建虚拟环境(ubuntu22)
linux·开发语言·python
Y1nhl2 小时前
力扣hot100_二叉树(4)_python版本
开发语言·pytorch·python·算法·leetcode·机器学习
阿木看源码3 小时前
bindingAdapter的异常错误
java·开发语言
wjcroom3 小时前
文本转语音-音画适时推送rtsp并播放
python
学习两年半的Javaer3 小时前
Rust语言基础知识详解【九】
开发语言·rust
灵山悟空3 小时前
rust语言match模式匹配涉及转移所有权Error Case
linux·开发语言·rust