【问题标题】:How to customize headers and column widths of DataFrame display?如何自定义 DataFrame 显示的标题和列宽?
【发布时间】:2013-03-15 07:00:50
【问题描述】:

通常,我喜欢为DataFrame 对象使用长的、描述性的列名(例如estimated_background_signal 而不仅仅是bg)。这种偏好的一个缺点是DataFrame 的显示表单有几列比它们的值需要的宽得多。例如:

In [10]: data.head()
     barcode estimated_background_signal inhibitor_code inhibitor_concentration
0  R00577279                         133            IRB                   0.001
1  R00577279                         189            SNZ                   0.001
2  R00577279                         101            CMY                   0.001
3  R00577279                         112            BRC                   0.001
4  R00577279                         244            ISB                   0.001

如果显示器更窄就好了。忽略标题,最窄的显示将是:

0 R00577279 113 IRB 0.001
1 R00577279 189 SNZ 0.001
2 R00577279 101 CMY 0.001
3 R00577279 112 BRC 0.001
4 R00577279 244 ISB 0.001

...但是完全消除标题并不是一个完全令人满意的解决方案。更好的做法是让显示足够宽以允许一些标题,可能占用几行:

    barcode estim inhib inhib
            ated_ itor_ itor_
            backg code  conce
0 R00577279   113   IRB 0.001
1 R00577279   189   SNZ 0.001
2 R00577279   101   CMY 0.001
3 R00577279   112   BRC 0.001
4 R00577279   244   ISB 0.001

很明显,没有一种约定可以适用于所有情况,但无论如何,pandas 是否提供任何方法来自定义DataFrame 的显示表单的标题和列宽?

【问题讨论】:

  • 我相信pandas.set_option('max_colwidth',[desired-max]) 应该可以满足您的需求,但是它现在似乎不起作用。请参阅this question 了解更多信息。

标签: pandas


【解决方案1】:

显然您可以使用pd.set_option 显示设置。如果您正在寻找不涉及更改笔记本显示设置的 pandas 特定答案,请考虑以下内容。

df = pd.DataFrame(np.random.randn(10, 2), 
    columns=['Very Long Column Title ' + str(i) for i in range(2)])
df.style.set_table_styles([dict(selector="th",props=[('max-width', '50px')])])

【讨论】:

    【解决方案2】:

    这是一种以非标准方式使用 pandas 的多索引功能的 hack,尽管我认为这样做没有任何重大问题。当然,使用多索引而不是简单索引会增加一些复杂性。

    cols = df.columns
    lencols = [ int(len(c)/2) for c in cols ]
    
    df.columns = pd.MultiIndex.from_tuples( 
                     tuple( ( c[:ln], c[ln:] ) for c, ln in zip(cols, lencols) ) )
    

    结果:

             bar  estimated_bac inhibit  inhibitor_c
            code kground_signal or_code oncentration
    0  R00577279            133     IRB        0.001
    1  R00577279            189     SNZ        0.001
    2  R00577279            101     CMY        0.001
    3  R00577279            112     BRC        0.001
    4  R00577279            244     ISB        0.001
    

    您还可以考虑创建一个字典来根据需要在长名称和短名称之间进行转换:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-07-16
      • 2017-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-18
      • 2016-11-21
      相关资源
      最近更新 更多