【问题标题】:Python Pandas: Style column headerPython Pandas:样式列标题
【发布时间】:2019-08-10 03:22:45
【问题描述】:

我正在使用pandas styler 根据列标题的名称为某些列提供背景颜色。 虽然这按预期工作,但列标题的背景颜色不会改变。

这是我的脚本中应用你的风格的部分:

def highlight_col(x):
    if x.name in added_columns:
        return ['background-color: #67c5a4']*x.shape[0]
    elif x.name in dropped_columns:
        return ['background-color: #ff9090']*x.shape[0]
    else:
        return ['background-color: None']*x.shape[0]



old = old.style.apply(highlight_col, axis=0)

有没有办法将style.apply()-function 不仅应用于列标题下方的单元格,还应用于包括列标题在内的整个列?

编辑: 为了澄清,这里是excel输出的截图: screenshot of excel output

“标题 2”应该与它下面的单元格具有相同的背景颜色。

【问题讨论】:

  • 使用df.style.set_table_styles查看列标题。
  • 可以显示您预期输出的示例图像吗?
  • @ScottBoston 在我不理解 set_table_styles 中更改了所有标题,但我只想更改特定标题。我还添加了一个屏幕截图。
  • 好的。我添加了一个解决方案。

标签: python pandas pandas-styles


【解决方案1】:

您可以使用np.vstack() 来堆叠列名,如下所示并创建一个新的数据框以应用该函数,然后使用header=False 导出到excel:

使用@Scott 的数据和 piR 的函数, 设置:

df = pd.DataFrame('some value', columns=['Header1','Header2','Header3'], index=np.arange(12))
def f(dat, c='red'):
    return [f'background-color: {c}' for i in dat]

你可以这样做:

pd.DataFrame(np.vstack((df.columns,df.to_numpy())),columns=df.columns).style.apply(
                  f,subset=['Header2']).to_excel('file.xlsx',header=False,index=False)

excel文件的输出:

【讨论】:

  • 你是神!用这个解决了 3 小时的头痛
【解决方案2】:

好的,我想我想出了一种方法来处理使用 html 'selectors' 格式化列标题:

使用大部分代码作为设置:

df = pd.DataFrame('some value', columns=['Header1','Header2','Header3'], index=np.arange(12))
added_columns = 'Header2'
dropped_columns = 'Header1'

def highlight_col(x):
    if x.name in added_columns:
        return ['background-color: #67c5a4']*x.shape[0]
    elif x.name in dropped_columns:
        return ['background-color: #ff9090']*x.shape[0]
    else:
        return ['background-color: None']*x.shape[0]


col_loc_add = df.columns.get_loc(added_columns) + 2
col_loc_drop = df.columns.get_loc(dropped_columns) + 2

df.style.apply(highlight_col, axis=0)\
  .set_table_styles(
     [{'selector': f'th:nth-child({col_loc_add})',
       'props': [('background-color', '#67c5a4')]},
     {'selector': f'th:nth-child({col_loc_drop})',
       'props': [('background-color', '#ff9090')]}])

输出:

注意:我使用的是 Python 3.6+ 功能的 f-string。

【讨论】:

  • 谢谢,但遗憾的是它不起作用。导出的 excel 文件仍然只为没有标题的列着色。你知道其他方法吗?
  • 是的,这似乎是错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-12-29
  • 2017-12-16
  • 2021-03-08
  • 2017-04-21
  • 1970-01-01
  • 2011-04-18
  • 1970-01-01
相关资源
最近更新 更多