利用pandas自定义Excel列

11 浏览
0 Comments

利用pandas自定义Excel列

我需要生成一些Excel报表。 我目前正在更多地使用pandas来处理我的数据,因此自然而然地,我希望使用pandas.ExcelWriter方法来生成这些报表。 但是,固定列宽度是个问题。

到目前为止,我所写的代码非常简单。 假设我有一个名为df的数据框:

writer = pd.ExcelWriter(excel_file_path, engine='openpyxl')
df.to_excel(writer, sheet_name="Summary")

我正在查看pandas文档,但是我真的没有看到任何设置列宽度的选项。 有什么技巧可以让列自动调整到数据?或者,在xlsx文件完成后,有什么我可以做的事情来调整列宽度吗?

(我使用OpenPyXL库,生成.xlsx文件 - 如果有任何区别的话。)

admin 更改状态以发布 2023年5月21日
0
0 Comments

动态调整所有列的长度

writer = pd.ExcelWriter('/path/to/output/file.xlsx') 
df.to_excel(writer, sheet_name='sheetName', index=False, na_rep='NaN')
for column in df:
    column_length = max(df[column].astype(str).map(len).max(), len(column))
    col_idx = df.columns.get_loc(column)
    writer.sheets['sheetName'].set_column(col_idx, col_idx, column_length)
writer.save()


使用列名手动调整列

col_idx = df.columns.get_loc('columnName')
writer.sheets['sheetName'].set_column(col_idx, col_idx, 15)


使用列索引手动调整列

writer.sheets['sheetName'].set_column(col_idx, col_idx, 15)


如果以上任何一种方法失败了

AttributeError: 'Worksheet' object has no attribute 'set_column'

请确保安装了xlsxwriter

pip install xlsxwriter


如果想获得更全面的解释,您可以阅读TDS上的文章“如何使用Pandas ExcelWriter自动调整Excel列的宽度”

0
0 Comments

user6178746的回答启发,我有如下解决方案:

# Given a dict of dataframes, for example:
# dfs = {'gadgets': df_gadgets, 'widgets': df_widgets}
writer = pd.ExcelWriter(filename, engine='xlsxwriter')
for sheetname, df in dfs.items():  # loop through `dict` of dataframes
    df.to_excel(writer, sheet_name=sheetname)  # send df to writer
    worksheet = writer.sheets[sheetname]  # pull worksheet object
    for idx, col in enumerate(df):  # loop through all columns
        series = df[col]
        max_len = max((
            series.astype(str).map(len).max(),  # len of largest item
            len(str(series.name))  # len of column name/header
            )) + 1  # adding a little extra space
        worksheet.set_column(idx, idx, max_len)  # set column width
writer.save()

0