2017-07-17 198 views
0

我有一個腳本,下載一個.csv並執行一些操作,然後使用df.to_html以良好的html格式發送熊貓數據框。基於列值的python顏色整個熊貓dataframe行

我想通過突出顯示或着色基於特定列中文本值的不同行來增強這些表格。

我試過使用熊貓styler似乎工作,但我不能轉換爲HTML使用to_html。我得到一個「AttributeError:'str'對象沒有屬性'to_html」

有沒有另一種方法來做到這一點?

作爲一個例子可以說我的DF看起來像下面,我想突出顯示每個製造商的所有行。即使用三種不同的顏色爲福特,雪佛蘭,道奇:

Year  Color  Manufacturer 
2011  Red   Ford 
2010  Yellow  Ford 
2000  Blue  Chevy 
1983  Orange  Dodge 

我發現我可以通過格式化成to_html但現在看來,它不能做什麼,我試圖通過着色來完成?我希望能夠做這樣的事情:

def colorred(): 
    return ['background-color: red'] 

def color_row(value): 
    if value is "Ford": 
     result = colorred() 
     return result 

df1.to_html("test.html", escape=False, formatters={"Manufacturer": color_row}) 

回答

0

驚訝這個從來沒有被回答的回頭看它,我不相信這甚至有可能與to_html格式化。經過多次重訪,我發現了一個非常好的解決方案,我很滿意。我沒有看到任何接近這個在線,所以我希望這可以幫助別人。

d = {'Year' : [2011, 2010, 2000, 1983], 
    'Color' : ['Red', 'Yellow', 'Blue', 'Orange'], 
    'Manufacturer' : ['Ford', 'Ford', 'Chevy', 'Dodge']} 
df =pd.DataFrame(d) 
print (df) 

def color_rows(s): 
    df = s.copy() 

    #Key:Value dictionary of Column Name:Color 
    color_map = {} 

    #Unqiue Column values 
    manufacturers = df['Manufacturer'].unique() 
    colors_to_use = ['background-color: #ABB2B9', 'background-color: #EDBB99', 'background-color: #ABEBC6', 
       'background-color: #AED6F1'] 

    #Loop over our column values and associate one color to each 
    for manufacturer in manufacturers: 
     color_map[manufacturer] = colors_to_use[0] 
     colors_to_use.pop(0) 

    for index, row in df.iterrows(): 
     if row['Manufacturer'] in manufacturers: 
      manufacturer = row['Manufacturer'] 
      #Get the color to use based on this rows Manufacturers value 
      my_color = color_map[manufacturer] 
      #Update the row using loc 
      df.loc[index,:] = my_color 
     else: 
      df.loc[index,:] = 'background-color: '   
    return df 

df.style.apply(color_rows, axis=None) 

輸出:

Pandas row coloring

由於我沒有名氣此處插入圖片是我如何通過電子郵件發送。我將它轉換爲html與以下。

styled = df.style.apply(color_rows, axis=None).set_table_styles(
         [{'selector': '.row_heading', 
          'props': [('display', 'none')]}, 
         {'selector': '.blank.level0', 
          'props': [('display', 'none')]}]) 
html = (styled.render()) 
+0

顯然我沒有信譽嵌入圖像,所以你必須按照鏈接看到Jupyter呈現的圖像 – Micmizer