旋转Panda DataFrame的列名称

时间:2017-10-12 17:38:36

标签: python pandas dataframe jupyter-notebook

我试图从熊猫中制作格式正确的表格。我的一些列名太长了。这些列的单元格很大,导致整个表格变得混乱。

在我的示例中,是否可以在显示列名时旋转它们?

data = [{'Way too long of a column to be reasonable':4,'Four?':4},
        {'Way too long of a column to be reasonable':5,'Four?':5}]
pd.DataFrame(data)

I would like to rotate the names of the columns as displayed here.

5 个答案:

答案 0 :(得分:4)

类似的东西:

data = [{'Way too long of a column to be reasonable':4,'Four?':4},
        {'Way too long of a column to be reasonable':5,'Four?':5}]
dfoo = pd.DataFrame(data)
dfoo.style.set_table_styles(
    [dict(selector="th",props=[('max-width', '80px')]),
        dict(selector="th.col_heading",
                 props=[("writing-mode", "vertical-rl"), 
                        ('transform', 'rotateZ(-90deg)'),
                        ])]
)

可能接近您想要的:

enter image description here

see result here

答案 1 :(得分:2)

通过查看pybloqs source code,了解可接受的答案,我能够找到如何旋转列而不安装pybloqs的方法。请注意,这也会旋转索引,但是我添加了删除这些代码的代码。

from IPython.display import HTML, display

data = [{'Way too long of a column to be reasonable':4,'Four?':4},
        {'Way too long of a column to be reasonable':5,'Four?':5}]
df = pd.DataFrame(data)

styles = [
    dict(selector="th", props=[("font-size", "125%"),
                               ("text-align", "center"),
                              ("transform", "translate(0%,-30%) rotate(-5deg)")
                              ]),
    dict(selector=".row_heading, .blank", props= [('display', 'none;')])
]

html = df.style.set_table_styles(styles).render()
display(HTML(html))

enter image description here

答案 2 :(得分:1)

我可以得到它,以便文本完全转过90度,但无法弄清楚如何使用text-orientation: upright因为它只是使文本不可见:(你错过了{{1必须为writing-mode设置才能产生任何效果的属性。此外,我通过稍微修改选择器使其仅适用于列标题。

text-orientation

希望这会让你更接近你的目标!

答案 3 :(得分:1)

使用Python库' pybloqs' (http://pybloqs.readthedocs.io/en/latest/),可以旋转列名称,也可以在顶部添加填充。唯一的缺点(正如文档中提到的)是top-padding不能与Jupyter一起工作。必须导出该表。

questions_mastered_for

Table in HTML with rotated column names

答案 4 :(得分:0)

我将@Bobain的好答案放入一个函数中,以便可以在整个笔记本中重复使用它。

def format_vertical_headers(df):
    """Display a dataframe with vertical column headers"""
    styles = [dict(selector="th", props=[('width', '40px')]),
              dict(selector="th.col_heading",
                   props=[("writing-mode", "vertical-rl"),
                          ('transform', 'rotateZ(180deg)'), 
                          ('height', '290px'),
                          ('vertical-align', 'top')])]
    return (df.fillna('').style.set_table_styles(styles))

format_vertical_headers(pandas.DataFrame(data))

enter image description here