我正在使用 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 () 函数 不仅适用于列标题下方的单元格,还适用于包括列标题的整个列?
编辑: 为了澄清起见,这里是 Excel 输出的屏幕截图: Excel 输出的屏幕截图
“标题 2”应与其下方的单元格具有相同的背景颜色。
遗憾的是,Pandas Styler 不能直接用于为列标题本身设置样式。
Styler.apply()
函数主要用于为 DataFrame 的
数据单元格
设置样式,而对标题行没有直接影响。
不过,你可以通过其他的方法来实现类似的效果:
1. 使用 CSS 来为标题添加样式:
- 你可以利用 HTML 和 CSS 的功能,在将样式化的 DataFrame 转换为 HTML 时,为标题添加背景颜色。
以下是一个例子:
```python import pandas as pd
# 示例数据 data = {'Header 1': [1, 2, 3], 'Header 2': [4, 5, 6]} df = pd.DataFrame(data)
# 列名列表 added_columns = ['Header 2'] dropped_columns = []
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]
# 使用 Styler 为数据单元格应用样式 styled_df = df.style.apply(highlight_col, axis=0)
# 使用 CSS 为标题添加样式 styled_df.to_html('styled_table.html', escape=False)
with open('styled_table.html', 'r+') as f: content = f.read() f.seek(0) f.write(f' <style> th.col_heading {{ background-color: #67c5a4; }} </style> \n{content}') ```
这段代码首先将样式化的 DataFrame 转换为 HTML 文件。然后,它打开该文件,并将一段 CSS 代码插入到文件的开头。这段 CSS 代码会将所有类名为
col_heading
的
<th>
元素(即表格标题)的背景颜色设置为
#67c5a4
。
2. 使用其他库来生成表格:
-
如果你需要更复杂的表格样式,可以考虑使用其他 Python 库,例如
XlsxWriter
或openpyxl
。这些库允许你对 Excel 文件的格式进行更精细的控制,包括标题样式。
希望这些方法能够帮助你实现你想要的效果!
标签:python,pandas,pandas-styles From: 55243717