如何在显示Pandas DataFrame时限制索引列的宽高?
问题描述
我构造了如下DataFrame:
df = pd.DataFrame(data=list(range(0,10)), index=pd.MultiIndex.from_product([[str(list(range(0,1000)))],list(range(0,10))], names=["ind1","ind2"]), columns=["col1"]) df['col2']=str(list(range(0,1000)))
该DataFrame显示时,索引列ind1过宽且自动换行。设置pd.options.display.max_colwidth = 5后,普通列col2能正常截断显示,但索引列ind1不受这个参数限制;尝试用df.style.hide_index()隐藏索引并配合上述设置时,col2又无法正常显示。想找个简单的设置,既能限制索引列的宽度,又能让每行只占一行高度,减少滚动操作,不想用复杂的自定义HTML显示方式。
解决方案
方法一:利用pandas内置显示参数
直接设置max_seq_items限制索引中长序列的显示长度,配合max_colwidth控制普通列,两者结合就能让索引和普通列都被截断,且每行保持单行:
pd.options.display.max_colwidth = 5 pd.options.display.max_seq_items = 5
设置后,索引里的长字符串会被截断为类似[0, 1, ...]的形式,普通列也会按设定宽度截断,整个DataFrame显示时每行都是单行高度。
方法二:索引转普通列再转回
如果需要更灵活控制,可先把索引转为普通列,设置显示宽度后再重新设为索引:
# 把索引转为普通列 df_temp = df.reset_index() # 设置列显示宽度 pd.options.display.max_colwidth = 5 # 重新设置回多级索引 df_temp.set_index(["ind1", "ind2"], inplace=True) # 此时显示的索引列会和普通列一样被截断 display(df_temp)
这种方法本质是让索引列先以普通列的身份受max_colwidth限制,再恢复索引身份,同样不需要自定义HTML。
内容的提问来源于stack exchange,提问作者Andrei
相关产品推荐
相关产品推荐

