使用python样式更改数据框中行的背景色

时间:2018-10-04 15:39:03

标签: python pandas styling

我有一个这样的数据框:

name       color parking_space
0  Terminal 1, 2   Green Lot            40
1     Terminal 4    Blue Lot            81
2     Terminal 5  Yellow Lot            59
3     Terminal 7  Orange Lot            45
4     Terminal 8     Red Lot            31
5      Long-Term         Lot            55

这是使用硒抓取的数据。我想根据parking_space的值更改整行的背景色。 这是我尝试过的代码,但是它的输出是与旧数据库相同的数据框。 代码:

terminal_name=driver.find_elements_by_class_name("tp-h-mod")
terminal_color=driver.find_elements_by_class_name("terminals-lot")
terminal_capacity=driver.find_elements_by_class_name("terminal-percentage")
mylist=[]
mylist1=[]
mylist2=[]
list1=[]
for data in terminal_name:
        mylist.append(data.text)
for data in terminal_color:
        mylist1.append(data.text)
for data in terminal_capacity:
        mylist2.append(data.text)
for i in range(6):
    text=mylist2[i]
    m=text.split('%')[0]
    list1.append(m)
df=pd.DataFrame({'name':mylist,'color':mylist1,'parking_space':list1})
def highlight(row):
    if int(row.parking_space[:2]) <= 25:
        return ['background-color: green']*3
    elif int(row.parking_space[:2]) >=26 and int(row.parking_space[:2]) <=50:
        return ['background-color:yellow']*3
    else:
        return ['background-color:red']*3
df.style.apply(highlight, axis=1)
print(df)
path = 'C:/Users/InterCEP/Desktop/parking/'
df.to_html(path+'parking.html')

1 个答案:

答案 0 :(得分:1)

因此,一旦使用int(row['parking_space'][:2])之类的东西解决了str / int比较问题,就好像this question中的问题已经解决了。

使用该问题的不可接受答案:

def highlight(row):
    if int(row.parking_space[:2]) <= 25:
        return ['background-color: green']*3
    elif int(row.parking_space[:2]) >=26 and int(row.parking_space[:2]) <=50:
        return ['background-color:yellow']*3
    else:
        return ['background-color:red']*3

然后,要保存样式化的数据框,请按如下所示分配变量

df_styled=df.style.apply(highlight, axis=1)

df_styled现在是一个<pandas.io.formats.style.Styler object,它生成一串独立的CSS和HTML。

如果您随后调用df_styler.render(),则可以将HTML准备保存为纯文本并由浏览器呈现:

<style  type="text/css" >
    #T_20b96880_c80e_11e8_a82d_a0afbd198380row0_col0 {
            background-color: yellow;
            ...