【问题标题】:Apply conditional formatting to entire row in excel将条件格式应用于excel中的整行
【发布时间】:2020-05-04 10:39:31
【问题描述】:

我是 python 初学者。 我正在尝试为使用 pandas 和 xlsxwriter 的文件夹中的所有 excel 文件设置相同的条件格式。 这些文件的结构如下:

A    | B   | C   | ... | K
ID   | ... | ... | ... | Risk
1    | ... | ... | ... | High
2    | ... | ... | ... | Medium
3    | ... | ... | ... | High
4    | ... | ... | ... | Low

我想根据 krisk 列中的值设置相同的格式(整行)。

import os, glob
import pandas as pd
import numpy as np
import xlsxwriter
import os

#Set the input directory
myFolder = r"MyFolderPath"
os.chdir(myFolder)

#generate a list of excel files using the glob method
fileList = glob.glob("*.xlsx")

#for each element within the list apply the conditional formatting
for elem in fileList:
    df = pd.read_excel(elem)
    writer = pd.ExcelWriter(df)
    df.to_excel(writer, sheet_name = 'sheet_1')

    workbook = writer.book

    format1 = workbook.add_format({'bg_color': 'red'})
    format2 = workbook.add_format({'bg_color': 'yellow'})

    worksheet = writer.sheets['sheet_1']

    worksheet.conditional_format('K2:K100', {'type': 'cell',
                                     'criteria': 'equal to',
                                     'value': '"high"',
                                     'format': format1})
    worksheet.conditional_format('K2:K100', {'type': 'cell',
                                      'criteria': 'equal to',
                                      'value': '"medium"',
                                      'format': format2})
    workbook.close

print ("Done")


我没有错误,但脚本没有修改文件。

【问题讨论】:

    标签: python pandas formatting conditional-formatting xlsxwriter


    【解决方案1】:

    您需要将类型更改为公式,并将条件更改为您想要的条件。检查此示例以了解您应该如何编写它:

    import pandas as pd
    
    df = pd.DataFrame({'ID': [1,2,3,4],
                        'B': ['a','b','c','d'],
                        'Risk': ["High","Medium","High","Low"]})
    
    writer = pd.ExcelWriter('test.xlsx', engine='xlsxwriter')
    df.to_excel(writer, sheet_name='Sheet1', index=False)
    workbook  = writer.book
    worksheet = writer.sheets['Sheet1']
    
    format_red = workbook.add_format({'bg_color': '#FFC7CE'})
    format_yellow = workbook.add_format({'bg_color': '#FFEB9C'})
    format_green = workbook.add_format({'bg_color': '#C6EFCE'})
    
    worksheet.conditional_format('A2:C5', {'type': 'formula',
                                'criteria': '=$C2="High"',
                                'format': format_red})
    
    worksheet.conditional_format('A2:C5', {'type': 'formula',
                                'criteria': '=$C2="Medium"',
                                'format': format_yellow})
    
    worksheet.conditional_format('A2:C5', {'type': 'formula',
                                'criteria': '=$C2="Low"',
                                'format': format_green})
    
    writer.save()
    

    输出:

    【讨论】:

    • 谢谢,这对我很有用!所以如果理解我不能直接用 xlsxwriter 读取数据帧,但我必须用 pandas 读取它,然后用 xlsxwriter 写入一个新文件,并用我需要的数据帧填充它,对吧?
    • 将这两种工具用于他们最擅长的领域。使用 pandas 读取您的文件并使用它(最强大的数据分析库)进行所有数据操作,然后如果您想使用 xlsxwriter 格式化文件输出它。
    • 好的,但我仍在寻找如何使用 xlsxwriter 读取我的输出文件。我正在尝试使用writer = pd.read_excel,但后来我有一个 AttributeError:DataFrame object has no attribute 'book'
    • 您无法使用 xlsxwriter 读取文件,您需要从头开始创建一个文件(这没有用),或者像您发布的示例中那样从 pandas 传递一个文件。
    猜你喜欢
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-29
    • 2012-05-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多