在Pandas Dataframe中,可以使用Conditional Formatting(条件格式)将负值标为红色,正值标为黑色。下面展示一个完整的过程,包括创建一个包含负值和正值的DataFrame、设置条件格式并将其应用到这个DataFrame上。
首先,我们需要导入必要的包:
import pandas as pd
import numpy as np
from openpyxl import load_workbook
from openpyxl.formatting.rule import ColorScaleRule
from openpyxl.styles import Font, Color
from openpyxl.utils import get_column_letter
然后,我们创建一个包含随机正负数的DataFrame:
np.random.seed(42)
df = pd.DataFrame({'A': np.random.randint(-10, 10, 10),
'B': np.random.randint(-10, 10, 10),
'C': np.random.randint(-10, 10, 10)})
接下来,我们为DataFrame生成Excel文件,并使用openpyxl读取Excel文件:
writer = pd.ExcelWriter('example.xlsx', engine='openpyxl')
df.to_excel(writer, sheet_name='Sheet1', index=False)
writer.save()
book = load_workbook('example.xlsx')
sheet = book.active
创建一个ColorScaleRule实例,并定义要应用的颜色规则:
red = Color(rgb='FF0000')
black = Color(rgb='000000')
rule = ColorScaleRule(start_type='min', start_color=red,
end_type='max', end_color=black)
使用get_column_letter获取要格式化的列的字母表示,并使用Font实例创建字体:
neg_font = Font(color=red)
pos_font = Font(color=black)
for i, col in enumerate(df.columns):
letter = get_column_letter(i+1)
sheet.conditional_formatting.add(f'{letter}2:{letter}11', rule)
for j in range(2, 12):
cell_value = sheet[f'{letter}{j}'].value
if cell_value < 0:
sheet[f'{letter}{j}'].font = neg_font
elif cell_value > 0:
sheet[f'{letter}{j}'].font = pos_font
最后,我们保存结果并查看结果:
book.save('example.xlsx')
这样,我们就成功地将Pandas DataFrame中的负值标记为红色,正值标记为黑色。