2017-10-12 154 views
4

我想從熊貓做出很好的格式化表。我的一些列名太長了。這些列的單元格很大,導致整個表格變得混亂。旋轉熊貓DataFrame的列名

在我的例子中,是否可以在列名顯示時旋轉它?

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.

+1

請你加標籤'jupyter notebook' – Wen

+0

顯然,這取決於你的情況,但也許是有意義的只是縮短/提高列名?但是,對於解決方法,您可以考慮轉換爲「假」多索引。例如。如果列名是「大衛南瓜」,你可以將「大衛」作爲最高級別,將「南瓜」作爲第二級別。顯然,這並不是多指標的,但我認爲它基本上會做你想做的。 – JohnE

+0

@JohnE,感謝您的建議。文本包裝是@Wen建議刪除的東西,但是是:'df.style.set_table_styles([dict(selector =「th」,props = [('max-width','50px')])])' 這是一個很好的解決方法,適用於短語,就像我的例子。不過,我也有很長的一段話。我仍然很想看看輪換是否可能!我不是CSS選擇專家,但我認爲這應該工作,但不會:'dfoo.style.set_table_styles([dict(selector =「th」,props = [('text-orientation','upright')]] )])' –

回答

1

使用Python庫'pybloqs'(http://pybloqs.readthedocs.io/en/latest/),可以旋轉列名稱以及在頂部添加填充。唯一的缺點是(正如文檔中提到的)頂端填充不能與Jupyter內聯。該表必須導出。

import pandas as pd 
from pybloqs import Block 
import pybloqs.block.table_formatters as tf 
from IPython.core.display import display, HTML 

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) 

fmt_header = tf.FmtHeader(fixed_width='5cm',index_width='10%', 
          top_padding='10cm', rotate_deg=60) 
table_block = Block(dfoo, formatters=[fmt_header]) 

display(HTML(table_block.render_html())) 
table_block.save('Table.html') 

Table in HTML with rotated column names

1

我能得到它,使文本完全轉身90度,但無法弄清楚如何使用text-orientation: upright,因爲它只是使文字無形:(你失蹤了具有用於text-orientation被設置writing-mode屬性有什麼影響。另外,我把它只能通過修改選擇一點適用於列標題。

dfoo.style.set_table_styles([dict(selector="th.col_heading",props=[("writing-mode", "vertical-lr"),('text-orientation', 'upright')])])

希望這能讓你更接近你的目標!

+0

這絕對會變暖!所有的單個字母至少旋轉 –