Pandas 根据 Excel 中的条件更改字体颜色并保存到相同的 excel python

Pandas change font color based on condition in Excel and save to the same excel python

Pandas 目前是新手。 我的问题陈述是我正在尝试打开现有的 excel sheet, 遍历其中存在的值, 添加 if 条件并在条件为真时更改文本的字体颜色。

这是我尝试更改颜色的示例 excel:

下面是我试过的代码:

def highlight_cells(val):
    color = 'red' if val =='DATA' else '#C6E2E9'
    return 'color: %s' % color

ddf = pd.read_excel(PathToTheExcelFile)
ddf.style.applymap(highlight_cells)
ddf.to_excel(PathToTheExcelFile,index=False)

我目前得到的是:

我要的是这个:

style.applymap 用于显示 HTML 中数据帧的输出,而不是更新 excel 工作表。您可以更改代码以更新 excel 中的字体。我正在阅读 excel input.xlsx,使用 openpyxl 更新内容并将其写入 output.xlsx。您还可以更改其他内容,例如大小、粗体、字体名称等。注意:使用的颜色是十六进制颜色,但前面没有#符号

import openpyxl

wb = openpyxl.load_workbook(filename="input.xlsx")
ws = wb.active

for row in range(2,ws.max_row+1): #Skipping first row as I assume it is header
    if ws.cell(row=row, column=3).value == 'DATA':
        ws.cell(row=row, column=3).font = openpyxl.styles.Font(color='FF0000') #, size=16, bold=True, name='Calibri')
    else:
        ws.cell(row=row, column=3).font = openpyxl.styles.Font(color='C6E2E9')
wb.save("output.xlsx")

使用 pandas.ExcelWriter 而不是 openpyxl 您可以使用下面的代码 pandas.ExcelWriter 将字体更改为红色(DATA)和绿色(GREEN)。注意:您可以使用 # 后跟 6 个字符的十六进制代码将颜色编辑为您想要的任何颜色,以防您想要更改字体颜色

import pandas as pd
import numpy as np
df = pd.read_excel('output.xlsx')
df.fillna('NA', inplace = True)

writer = pd.ExcelWriter('output1.xlsx')
df.to_excel(writer, sheet_name= 'sheet1', index=False)
worksheet = writer.sheets['sheet1']
workbook = writer.book
cell_format_red = workbook.add_format({'font_color': 'red'})
cell_format_green = workbook.add_format({'font_color': 'green'})

start_row = 1
start_col = 2
end_row = len(df)
end_col = start_col

worksheet.conditional_format(start_row, start_col, end_row, end_col, {'type': 'cell', 'criteria': '==', 'value': '"DATA"', 'format': cell_format_red})
worksheet.conditional_format(start_row, start_col, end_row, end_col, {'type': 'cell', 'criteria': '!=', 'value': '"DATA"', 'format': cell_format_green})

writer.save()

.style.applymap 生成一个 Styler 对象,它有一个 to_excel 方法可以方便地导出它:

def highlight_cells(val):
    color = 'red' if val == 'DATA' else '#C6E2E9'
    return 'color: %s' % color

ddf.style.applymap(highlight_cells).to_excel("data.xlsx", index=False)

# If you want to stylize only the Comments column
ddf.style.applymap(highlight_cells, subset="Comments").to_excel("data.xlsx", index=False)

结果: