利用pandas自定义Excel列
利用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日
动态调整所有列的长度
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列的宽度”。
受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()