在 Excel 工作表中操作数据框输出

Posted

技术标签:

【中文标题】在 Excel 工作表中操作数据框输出【英文标题】:Manipulate dataframe output in Excel sheets 【发布时间】:2021-08-01 08:34:55 【问题描述】:

早上,

我有一个数据框,我根据特定列中的交易簿将其拆分为多个工作表。一旦导出到单个工作表,我想自动调整数据、隐藏网格线和居中对齐数据并冻结特定单元格上的窗格 ($B$2)。导出已完成,但 Excel 中的格式不起作用,我卡在自动调整上:

dfTemp =   'Trading_Book': ['A', 'A', 'A',
                 'B', 'B', 'B',
                 'C', 'C', 'C',
                 ],
        'Client': ['AA', 'AA', 'AA',
                 'BB', 'BB', 'BB',
                 'CC', 'CC', 'CC',
                 ],
      
dfTemp = pd.DataFrame.from_dict(dfTemp)
print(dfTemp)

# Export each Trading Books data to a separate sheet in Excel
excel_writer = pd.ExcelWriter('C:\EOM_ML_201901\outputs\Excel_Data.xlsx')
dfTemp.to_excel(excel_writer, sheet_name='Consolidated')
# Get Book List
Books = dfTemp['Trading_Book'].unique().tolist()
# For each book send to Excel sheet
for myname in Books:
    mydf = dfTemp.loc[dfTemp.Trading_Book == myname]
    mydf.to_excel(excel_writer, sheet_name=myname)
    # Autofil columns
    for column in mydf:
        column_length = max(mydf[column].astype(str).map(len).max(), len(column))
        col_idx = mydf.columns.get_loc(column)
        excel_writer.sheets[myname].set_column(col_idx, col_idx, column_length)
excel_writer.save()

任何帮助将不胜感激。

【问题讨论】:

感谢@Blimitless。回到办公室会检查。 ?????? 【参考方案1】:

当您写入文件时,可以直接从 pandas 中冻结窗格:

mydf.to_excel(excel_writer, sheet_name=myname, freeze_panes=(x,y))

根据documentation here,将 (x,y) 替换为您要冻结的行和列。

不幸的是,相同的文档没有显示直接从 pandas 隐藏网格线的方法。但是,您可以调用 xlsxwriter 作为用于编写的引擎:mydf.to_excel(excel_writer, sheet_name=myname, engine='xlsxwriter')

那么您应该可以按照accepted answer here 隐藏网格线。

对于居中对齐,您可以使用 xlsxwriter 包中的这两个命令,具体取决于您想要水平居中还是垂直居中:

cell_format.set_align('center')
cell_format.set_align('vcenter')

Documentation here 来自 xlsxwriter,使用 ctrl-f 'align' 跳到你想要的部分。

祝你好运!

【讨论】:

以上是关于在 Excel 工作表中操作数据框输出的主要内容,如果未能解决你的问题,请参考以下文章

Python Pandas 数据框在 Excel 工作表中读取精确的指定范围

基于Excel工作表中的单元格颜色和文本颜色子集数据框

Python:如何快速创建仅包含大型 Excel 工作表中特定列的 pandas 数据框?

如何将数据框拼接成较小的表格并将每个表格保存到 Excel 工作表中

如何使用过滤的数据框更新现有 Excel 工作表的一部分?

excel工作表中的超级脚本没有出现在asp.net的数据集中