如何限制Pandas中列标题的宽度

时间:2017-08-25 14:05:40

标签: python pandas dataframe

如何在显示数据帧等时限制Pandas中的列宽?我知道display.max_colwidth,但它不会影响列名。另外,我不想破坏名称,而是要截断。

如果我设置display.max_colwidth它确实足以限制值,并使用省略号缩短它们,但列名称保持长且不受影响。我在documentation的任何地方都没有看到这一点,并且在大线程herehere中没有看到它。这是一个错误吗?我知道我可以截断列的名称,但我希望它们很长,否则在显示时会缩短。

只是要清楚这是发生了什么:

之前

     State area_harveste_2016_1000_acres area_harvested_2017_1000_acres yield_per_acr_2016_bushels yield_per_acre_2017_bushels
4  Alabama                           315                            235                      120.0                       165.0

更改宽度

pd.set_option("display.max_colwidth",5)

   State area_harveste_2016_1000_acres area_harvested_2017_1000_acres yield_per_acr_2016_bushels yield_per_acre_2017_bushels
4   A...   315                           235                           1...                       1...

更新

目前这是Pandas已确认的问题(截至20.3,问题为#7059#16911。在解决之前,我写了一个解决方法,设置和取消设置max_colwidth以及截断重命名。虽然没有similar question

的答案,但我无法完成
def pf(df, L=15):
    """Limit ENTIRE column width (including header)"""
    O = pd.get_option("display.max_colwidth")
    pd.set_option("display.max_colwidth", L)
    print(df.rename(columns=lambda x: x[:L - 3] + '...' if len(x) > L else x))
    pd.set_option("display.max_colwidth", O)

1 个答案:

答案 0 :(得分:0)

截至v0.20.3,我不相信大熊猫已为此提供支持。

作为快速解决方法,您可以通过使用df.rename回调来调用lambda来截断长字词来截断要显示的列名称。

MVCE:

In [1424]: df
Out[1424]: 
     State  area_harveste_2016_1000_acres  area_harvested_2017_1000_acres  \
4  Alabama                            315                             235   

   yield_per_acr_2016_bushels  yield_per_acre_2017_bushels  
4                       120.0                        165.0  

In [1425]: df.rename(columns=lambda x: '_'.join(k[0] if k.isalpha() else k for k in  x.split('_')))
Out[1425]: 
         S  a_h_2016_1000_a  a_h_2017_1000_a  y_p_a_2016_b  y_p_a_2017_b
4  Alabama              315              235         120.0         165.0

标题应该仍然足够详细,以便从首字母开始了解每列的内容。