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

ehi*_*ler 7 python dataframe pandas

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

如果我设置display.max_colwidth它,那么肯定会限制值,并用省略号缩短它们,但列名仍然很长且不受影响。我没有在文档中的任何地方看到这一点,也没有在此处此处的大线程中看到它。这是一个错误吗?我知道我可以截断列的名称,但我希望它们很长,否则在显示时会缩短。

需要明确的是,这就是正在发生的事情:

     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
Run Code Online (Sandbox Code Playgroud)

改变宽度

pd.set_option("display.max_colwidth",5)
Run Code Online (Sandbox Code Playgroud)

   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...
Run Code Online (Sandbox Code Playgroud)

更新

目前,这是 Pandas 的一个已确认问题(截至 20.3,问题为#7059#16911。在解决之前,我编写了一个解决方案,它设置和取消设置max_colwidth以及重命名截断。尽管没有这个类似问题的答案

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)
Run Code Online (Sandbox Code Playgroud)

reh*_*qds 0

您可以使用 Pandas Styler,它可以为数据帧的 HTML 显示设置 CSS 属性:

dfs = df.style.set_table_styles([dict(selector="th", props=[('max-width', '120px'),
                                ('text-overflow', 'ellipsis'), ('overflow', 'hidden')])])
display(dfs)
Run Code Online (Sandbox Code Playgroud)

th用于表头,用于表的其余数据td