我试图从熊猫中制作格式正确的表格。我的一些列名太长了。这些列的单元格很大,导致整个表格变得混乱。
在我的示例中,是否可以在显示列名时旋转它们?
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)
答案 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)'),
])]
)
可能接近您想要的:
答案 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))
答案 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
答案 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))