带边框的 Python Jupyter Notebook 风格数据框

Ran*_*hen 2 css python pandas jupyter 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)})
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

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

df.style.format({
    'A': '{:,.2f}'.format,
    'B': '{:,.2%}'.format,
})
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

那么我该如何更改代码,以便格式化的 df 会带有边框呢?

在此输入图像描述

Nic*_*ica 7

解释问题

当您使用 设置样式时%%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,
})
Run Code Online (Sandbox Code Playgroud)

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

重要提示:这两个调用style.set_properties必须style.format链接起来。否则,仅使用最后一个。

解决方法:一步一步来

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

初始命令

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

列上的样式

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

细胞的属性

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

还设置表属性,对于


为了走得更远

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