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

Pandas DataFrame列标题与列内容不对齐问题分析与解决

Pandas打印带ANSI颜色代码的DataFrame列对齐问题及解决

问题现象

用Python字典存储如下嵌套结构的数据:

{'col1':
    {'row1': '1_1',
     'row2': '1_2'},
 'col2':  
    {'row1': '2_1',
     'row2': '2_2'},
  ...
}

列标题均为2字符(如"C1"),行标题最长30字符,行值最长20字符且被shell颜色转义字符串(如\033[95m)包裹,平均长度3字符。将该字典转为DataFrame打印时,出现列标题与列内容严重不对齐的情况:列标题会占据终端整个宽度,而列内容仅按各列数据的最大宽度排布,即使仅显示首尾部分列(如C1 C2 C3 ... C18 C19 C20),二者宽度仍不匹配。

尝试过的无效方案

曾尝试通过pd.set_option('display.max_colwidth', 20)调整列宽,但效果不佳;将值设为10时,列值被截断为单个字符,列标题之间仍存在大量空白。

原因排查与解决方法

移除行值中的颜色字符串后,对齐问题消失。推测Pandas计算列宽度时,错误地将颜色代码计入列标题的宽度计算,但未将其计入列值的宽度计算,属于Pandas的bug。最终通过给列标题添加与颜色代码等长度的空白转义码,使列标题和列值的宽度计算匹配,解决了对齐问题。

复现步骤

  • 将以下CSV内容保存为mock_data.csv
  • 使用Pandas加载该CSV文件为DataFrame
  • 给任意数据值包裹ANSI颜色转义代码
  • 打印DataFrame即可复现对齐问题

复现用CSV内容

,0,1,10,11,12,13,14,15,16,17,18,19,2,3,4,5,6,7,8,9
XXXXXX,XXX,XXX,XXX,XXX,XXX,XXX,XXX,XXX,XXX,XXX,XXX,XXX,XXX,XXX,XXX,XXX,XXX,XXX,XXX,XXX
XXXXXXXXXX,XXX,XXX,XXX,XXX,XXX,XXX,XXX,XXX,XXX,XXX,XXX,XXX,XXX,XXX,XXX,XXX,XXX,XXX,XXX,XXX
XXXX,XXX,XXX,XXX,XXX,XXX,XXX,XXX,XXX,XXX,XXX,XXX,"XXX, XXX",XXX,XXX,XXX,XXX,XXX,XXX,XXX,XXX
XXXXX,XXX,XXX,XXX,XXX,XXX,XXX,XXX,XXX,XXX,XXX,XXX,XXX,XXX,XXX,XXX,XXX,XXX,XXX,XXX,XXX
XXXXXXX,XXX,XXX,XXX,XXX,XXX,XXX,XXX,XXX,XXX,XXX,XXX,XXX,XXX,XXX,XXX,XXX,XXX,XXX,XXX,XXX
XXXXXXXXX,XXX,XXX,XXX,XXX,XXX,XXX,XXX,"XXX, XXX",XXX,XXX,XXX,XXX,XXX,XXX,XXX,XXX,XXX,XXX,XXX,XXX
X,XXX,XXX,XXX,XXX,XXX,XXX,XXX,XXX,XXX,XXX,XXX,"XXX, XXX",XXX,XXX,XXX,XXX,XXX,XXX,XXX,XXX
XX,XXX,XXX,XXX,XXX,XXX,XXX,XXX,XXX,XXX,XXX,XXX,XXX,XXX,XXX,XXX,XXX,XXX,XXX,XXX,XXX
XXXXXXXX,XXX,XXX,XXX,XXX,XXX,"XXX, XXX",XXX,XXX,XXX,XXX,XXX,"XXX, XXX",XXX,XXX,XXX,XXX,XXX,XXX,"XXX, XXX",XXX
XXX,XXX,XXX,XXX,XXX,XXX,XXX,XXX,XXX,XXX,XXX,XXX,XXX,XXX,XXX,XXX,XXX,XXX,XXX,XXX,XXX

复现代码

import pandas as pd

df = pd.read_csv('mock_data.csv')
df['1'].iloc[1] = '\033[91m' + df['1'].iloc[1] + '\033[0m'
print(df)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 21:09:57