EXCEL PYTHON中的颜色特定单元格

本教程将介绍EXCEL PYTHON中的颜色特定单元格的处理方法,这篇教程是从别的地方看到的,然后加了一些国外程序员的疑问与解答,希望能对你有所帮助,好了,下面开始学习吧。

EXCEL PYTHON中的颜色特定单元格 教程 第1张

问题描述

我有两个数据帧,我必须从中识别单元格中的差异。无论我在哪里发现差异,我都必须在第一个数据帧和第二个数据帧中更改该单元格的颜色(背景色)。
在我的例子中,第一个DataFrame单元格必须用#FFCCCC着色,第二个用#DAF6FF着色。这些数据帧的输出必须保存在两个不同的EXCEL文件中。

我尝试了以下答案:https://kanoki.org/2019/01/02/pandas-trick-for-the-day-color-code-columns-rows-cells-of-dataframe/

Python pandas dataframe and excel: Add cell background color

所有这些内容都是关于使用带Style的Openpyxml的。我的挑战是我必须更新那些在比较阶段本身发生变化并且(着色)必须反映在Excel输出中的单元格。
我怎么实现这一点?希望有人能帮我找到正确的更好的方法。

注意:我的数据很大(行列中大约有10000行)。

输入:

df1:

第1列 第2列 第3列
10 BNG
12 PE CHN
30 点赞 DHL

DF2:

第1列 第2列 第3列
10 BNG
13 PE CHI
30 SNM DHL

输出必须是带有这样颜色的单元格的EXCEL。

我的代码如下:

‘’

def split_compare_differ_df(difference_in_df):
 bg_delete = "background-color: red"
 bg_insert = "background-color: blue"
 unique_of_df1 = df1
 unique_of_df2 = df2
 for i in unique_of_df1.itertuples():
  for j in unique_of_df2.itertuples():
if i[1] == j[1]:
 for idx, (a, b) in enumerate(zip(i, j)):
  x=list(i)
  y=list(j)
  if not idx ==0:
if a == b:
 x[idx] = a
 y[idx] = b
 print(f'Index {idx} match: {a}')
else:
 x[idx] = '{}{}'.format(bg_delete,a)
 y[idx] = '{}{}'.format(bg_insert, b)
 print(f'Index {idx} no match: {a} vs {b}')
#  targetFileActiveSheet.cell(row=rowNum, column=colNum).fill = PatternFill(bgColor='FFEE08', fill_type = 'solid')
  i = tuple(x)
  j = tuple(y)

 i_list = list(i)
 i_list = i_list[1:]
 i_tuple = tuple(i_list)
 j_list = list(j)
 j_list = j_list[1:]
 j_tuple = tuple(j_list)
 unique_of_df1.loc[i[0]] = i_tuple
 unique_of_df2.loc[j[0]] = j_tuple
 return(unique_of_df1,unique_of_df2)

‘’

推荐答案

可以通过生成比较矩阵简化比较代码:

from styleframe import StyleFrame, Styler

sf1 = StyleFrame({'col1': [10, 12, 30], 'col2': ['Yes', 'PE', 'LIKE'], 'col3': ['BNG', 'CHN', 'DHL']})
sf2 = StyleFrame({'col1': [10, 12, 30], 'col2': ['No', 'PE', 'SNM'], 'col3': ['BNG', 'CHI', 'DHL']})

sf1_diff = Styler(bg_color='#FFCCCC')
sf2_diff = Styler(bg_color='#DAF6FF')

ne = sf1.data_df != sf2.data_df

print(ne)

现在ne是包含True的差异矩阵,其中两个数据帧之间存在差异:

 col1col2col3
0  FalseTrue  False
1  False  FalseTrue
2  FalseTrue  False

现在我们所要做的就是相应地设置原始框架的样式:

for col in ne.columns:
 sf1.apply_style_by_indexes(indexes_to_style=ne[ne[col]].index,
 styler_obj=sf1_diff,
 cols_to_style=col)
 sf2.apply_style_by_indexes(indexes_to_style=ne[ne[col]].index,
 styler_obj=sf2_diff,
 cols_to_style=col)

sf1.to_excel('sf1.xlsx').save()
sf2.to_excel('sf2.xlsx').save()

我们最终得到sf1.xlsx

sf2.xlsx

如果希望两个框架位于同一工作表上,可以使用

writer = StyleFrame.ExcelWriter('output.xlsx')
sf1.to_excel(writer)
sf2.to_excel(writer, startcol=len(sf1.columns) + 2)
writer.save()

好了关于EXCEL PYTHON中的颜色特定单元格的教程就到这里就结束了,希望趣模板源码网找到的这篇技术文章能帮助到大家,更多技术教程可以在站内搜索。