首页 > 解决方案 > 带边框的 Python Jupyter Notebook 样式数据框

问题描述

我正在使用以下代码在 jupyter 中格式化带有边框的数据框

%%HTML
<style type="text/css">
table.dataframe td, table.dataframe th {
    border: 1px  black solid !important;
  color: black !important;
}
</style>

import pandas as pd
import numpy as np

df = pd.DataFrame( data={'A': range(5), 'B':  np.arange(0, 1 , 0.2)})

在此处输入图像描述

但是当我尝试格式化 DataFrame 时,我得到了基本的 DataFrame,

df.style.format({
    'A': '{:,.2f}'.format,
    'B': '{:,.2%}'.format,
})

在此处输入图像描述

那么如何更改代码以使格式化的 df 出现边框呢?

在此处输入图像描述

标签: pythoncsspandasjupyter-notebookjupyter

解决方案


解释问题

当您使用 设置样式时%%HTML,您的目标只是那些HTML与您的选择器匹配的元素CSS

将 a 设置style为数据框,然后将其显示在单元格中时,HTML Table生成的不再具有HTML Class命名dataframe(但有点随机 ID)。这就是您%%HTML不适用于样式数据框的输出的原因。

那该怎么办?

可能的解决方案

通过 Pandas 设置表格本身的样式:

df.style.set_properties(
    **{'color': 'black !important',
       'border': '1px black solid !important'}
).set_table_styles([{
    'selector': 'th',
    'props': [('border', '1px black solid !important')]
}]).format({
    'A': '{:,.2f}'.format,
    'B': '{:,.2%}'.format,
})

在这些代码行中,您既要为数据框指定HTML样式,又要为其列设置格式样式。

重要:这两个调用,两者都style.set_properties必须style.format链接。否则,只会使用最后一个。

解决方法:一步一步

1.-因此,给定您的初始命令:

初始命令

2.- 如果您只在列上应用样式:

列上的样式

3.- 如果您为单元格设置属性:

单元格的属性

4.- 如果您还设置表属性,例如,在th标题元素上:

还设置表属性,对于


走得更远

如果您想在其他 DataFrame 中共享这些样式,请查看Pandas 样式文档


推荐阅读