我有一个这样的数据框:
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')
答案 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;
...