在Python中使用循环和数据框样式属性突出显示Excel列单元格

时间:2018-08-21 12:32:18

标签: python css loops dataframe automation

我正在尝试自动化一个简单的过程。我想要代码要做的是浏览“文章URL”中的每篇文章,并检查该文章中是否存在“子类别名称”下列出的公司。如果是这样,我希望它以绿色突出显示单元格,如果不是,则突出显示红色。我设法使其可以在一个单元格上工作(见图1)。

但是后来我尝试遍历整个电子表格。对于我的一生,我不知道为什么它不起作用(请参见下面的代码)。循环运行没有任何错误,但是当我转到文档时,它根本没有突出显示(请参见图2)。

我怀疑这与每次循环后未保存对电子表格所做的更改有关。但是如何将电子表格保存到变量中,因为只有在导出数据框并将其保存为xlsx后才能查看样式应用程序。

谢谢您的帮助:)

Image 1

Image 2

import pandas as pd
import requests as rq 

path='/Users/mbongeni/Documents/Career/Internship/ProjectRunway/ProjectRunwayCopy.xlsx'
df = pd.read_excel(path)

#select following columns from df:
dfR = df[['Category Name','Sub-Category Name','Country','Article URL']]

#filter by online news coverage in column Category Name
is_online = dfR['Category Name']=='Online News Coverage: Project Runway SA'
dfR_online = dfR[is_online]

#colour functions
def cell_color_g(d):
    return 'background-color: green'
def cell_color_r(d):
     return 'background-color: red'

#test loop on first five rows:
for i, site in enumerate(dfR_online[0:4]['Article URL']):  

     #download site and check if strings in 'condition' are on site
     site_download = rq.get(site)
     condition = "Project Runway" in site_download.text \
                 and "South Africa" in site_download.text \
                 or "Project Runway SA" in site_download.text 

     if condition:
        #color cell row i in column 'Article URL' green
        dfR_online.style.\
        applymap(cell_color_g, subset=pd.IndexSlice[i,['Article URL']])

     else:
         #color cell row i in column 'Article URL' red
         dfR_online.style.\
         applymap(cell_color_r, subset=pd.IndexSlice[i, ['Article URL']])

#recreate spreadsheet with style applied for specified range 

dfR_online.style.to_excel('HighlightedSheet.xlsx', engine='openpyxl')

0 个答案:

没有答案