You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将pd.read_excel导入的Excel列正确格式化输出到sg.Output中

列不对齐的核心原因有两个:

  1. sg.Output 默认使用比例字体(每个字符宽度不统一),而pandas打印DataFrame时默认按照等宽字体的字符宽度计算留白实现对齐,两者不匹配就会出现错位
  2. pandas默认输出的字符串留白、列宽适配是针对终端等宽场景设计的,没有适配GUI输出组件的显示规则

方案1:修改sg.Output为等宽字体(改动最小,最快生效)

直接在定义sg.Output时指定font参数为等宽字体即可,可选等宽字体包括Consolas、Courier New、宋体(中文等宽)等,示例代码:

# 将原有sg.Output行替换为如下代码
sg.Output(size=(81, 12), key='-OUTPUT-', font=('Consolas', 10))

如果需要显示中文无乱码且对齐,可使用font=('宋体', 11)这类中文等宽字体配置,修改后直接打印DataFrame即可正常对齐。

方案2:手动格式化DataFrame输出字符串

如果不想修改Output的字体,可以在打印前通过pandas的to_string()方法手动调整输出格式,强制统一列宽:

filter_df = df[df["CODE :"] == values[0]].head()
# col_space指定每列固定宽度,可根据实际列内容长度调整,justify指定对齐方式
print(filter_df.to_string(col_space=15, justify='left'))

调整后即使使用比例字体也能大幅降低错位概率。

方案3:改用sg.Table组件展示表格(推荐,显示效果最优)

sg.Output本身是为纯文本输出设计的,如果你需要专门展示表格数据,换成sg.Table组件更适配,支持自定义列宽、滚动、排序等功能,完全不会出现对齐问题。
首先修改布局,将sg.Output替换为sg.Table:

# 布局中替换原有Output部分,headings直接取DataFrame的列名即可,col_widths可根据实际需求调整
[sg.Table(values=[], headings=df.columns.tolist(), key='-TABLE-', num_rows=12, auto_size_columns=False, col_widths=[20,20,20], font=('微软雅黑',10))]

筛选数据后直接更新Table组件内容即可,不需要print:

filter_df = df[df["CODE :"] == values[0]].head()
# 将DataFrame转换为二维列表传入Table组件
window['-TABLE-'].update(values=filter_df.values.tolist())

内容的提问来源于stack exchange,提问作者Aikrana

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 16:36:00