【问题标题】:Pandas to Excel conditional formatting whole columnPandas 到 Excel 条件格式整列
【发布时间】:2018-03-26 19:52:43
【问题描述】:

我想用格式化将 Pandas 数据框写入 Excel。为此,我使用xlsxwriter。我的问题是双重的:

  • 首先,如何将条件格式应用于整列?在examples 他们使用特定的单元格范围格式(例如worksheet1.conditional_format('B3:K12', ...)),有没有办法可以引用整列?

  • 其次,如果 B 列与 C 列的差异超过 15%,我想将 B 列标记为红色。什么是正确的公式?

我目前正在尝试下面的代码,但它不起作用(我不知道如何引用列)。

writer = pd.ExcelWriter('pacing.xlsx', engine='xlsxwriter')
df.to_excel(writer, sheet_name='Last year vs. current state')
#worksheet.set_column('B:B', 18, format1)
workbook  = writer.book
worksheet = writer.sheets['Last year vs. current state']
format_missed = workbook.add_format({'bg_color': '#ff0000'})
format_ok = workbook.add_format({'bg_color': '#008000'})

worksheet.conditional_format('C:C', {'type':     'formula',
                                        'criteria': '=ABS((B-C)/C) > 15',
                                        'format':   format_missed})
writer.save() 

另外,我在 Mac 上运行 Excel,不确定它是否有任何区别,但我注意到 Windows 版本在哪里使用 ,,Mac 版本需要 ; 用于公式。不知道这对xlsxwriter 有何影响。

【问题讨论】:

  • 在 Excel 中执行,然后在 python 中复制公式。 B:B 是引用整个列的常用方法(在这种情况下也是:在 excel 中先测试)。条件格式是excel的东西。也许您只想简单地检查 python 和格式化单元格,而不是给 Excel 条件、范围和格式参数)。

标签: python pandas xlsxwriter


【解决方案1】:

首先,如何将条件格式应用于整列

您可以指定列中从第一行到最后一行的单元格范围,例如C1:C1048576。内部是这样存储的,只是显示为C:C

这适用于可以在 XlsxWriter 中使用列范围的所有情况。

其次,如果 B 列与 C 列的差异超过 15%,我想用红色标记 B 列。什么是正确的公式?

这是您应该在 Excel 中计算出来的内容,然后将条件格式应用于 XlsxWriter。这样的事情可能会起作用:

=ABS(B1-C1)/C1 > 0.15

另外,我在 Mac 上运行 Excel,不确定它是否有任何区别,但我注意到 Windows 版本在哪里使用,Mac 版本需要;对于公式。不知道这对 xlsxwriter 有何影响

请参阅 XlsxWriter 文档的 Working with Formulas 部分,了解如何使用它。

【讨论】:

  • 谢谢!至于ABS(B1-C1)/C1 > 0.15 部分,这又只指定给一行,但我希望它适用于所有行。关于我如何做到这一点的任何想法?我目前正在使用=(ABS(($D:$D-$E:$E)/$E:$E)) > 0.15,但它什么也没做。即使在 Excel 中,这也会使背景变为白色。
  • 公式ABS(B1-C1)/C1 > 0.15 将适用于整个范围。你可以试试。如果将条件公式应用于范围,则只需根据范围中的第一个单元格来编写它。确保也省略 $ 绝对引用。
  • 文档中还说明了引用格式“C:C”的列,但在这种情况下,条件格式不起作用..出于某种原因。如果您找到解决方案,请告知!
  • @kritcoder。 C:C 表示法仅用于仅处理列的方法。 conditional_format() 方法适用于范围,因此您需要将列指定为 C1:C1048576,如答案所示。
猜你喜欢
  • 2023-03-08
  • 1970-01-01
  • 1970-01-01
  • 2016-03-08
  • 1970-01-01
  • 2016-08-08
  • 2017-08-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多