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

非字母语言作为Pandas索引致行内容右移的问题及解决方法求助

Pandas非字母语言索引打印偏移问题的原因与解决办法

问题原因

Pandas在计算终端输出的列宽度时,默认将所有字符按单宽度字符计算,但中文、日文、韩文等东亚字符(CJK)在大多数终端中是双宽度字符(占2个英文字符的宽度)。这种宽度计算不匹配,会导致索引列的实际宽度超出Pandas预估的宽度,进而使得后续数据列整体向右偏移,破坏表格排版。

解决办法

方法1:修改Pandas显示配置(推荐)

通过设置Pandas的Unicode宽度处理选项,让它正确识别东亚字符的双宽度属性:

import pandas as pd
import numpy as np

# 启用东亚字符宽度识别
pd.set_option('display.unicode.ambiguous_as_wide', True)
pd.set_option('display.unicode.east_asian_width', True)

df = pd.DataFrame(np.arange(16).reshape(4, 4), 
                  columns=['one', 'two', 'three', 'four'], 
                  index=['北海道', 'colorado', 'utah', 'arizona'])
print(df)

执行后输出会恢复整齐:

one  two  three  four
北海道       0    1      2     3
colorado    4    5      6     7
utah        8    9     10    11
arizona    12   13     14    15

方法2:使用第三方库格式化输出

如果终端对字符宽度的支持存在问题,可以用tabulate库来生成更鲁棒的表格:

  1. 先安装库:
pip install tabulate
  1. 使用示例:
from tabulate import tabulate
import pandas as pd
import numpy as np

df = pd.DataFrame(np.arange(16).reshape(4, 4), 
                  columns=['one', 'two', 'three', 'four'], 
                  index=['北海道', 'colorado', 'utah', 'arizona'])

print(tabulate(df, headers='keys', tablefmt='simple'))

输出效果同样整齐,且兼容性更好。

方法3:将索引转为普通列(变通方案)

如果只是临时查看数据,可以把索引转换为普通列,避免索引列的排版问题:

import pandas as pd
import numpy as np

df = pd.DataFrame(np.arange(16).reshape(4, 4), 
                  columns=['one', 'two', 'three', 'four'], 
                  index=['北海道', 'colorado', 'utah', 'arizona'])

# 索引转为列,默认列名为index
print(df.reset_index())

输出示例:

index  one  two  three  four
0      北海道    0    1      2     3
1  colorado    4    5      6     7
2      utah    8    9     10    11
3    arizona   12   13     14    15

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 14:07:40