熊猫样式突出显示格式的逐步说明是什么?

时间:2020-08-08 18:39:06

标签: python pandas formatting styles

这是一个非常新手的问题,但是大多数教程都假设学生理解这一点,但我不是。我发现了这个熊猫格式样式的示例:

import fs from 'fs'
const FILE_NAME = '../assets/pies.json'
let pieRepo = {
    get: () => {return new Promise((resolve, reject) => {
        fs.readFile(FILE_NAME, (err, data) => {
            if(err){
                reject(err)
            } 
            else{
                resolve(JSON.parse(data))
            }

        })
    })}
}
export default pieRepo

此函数绘制列中包含最大值的单元格。我不明白这是怎么回事。我知道这是一个广泛的问题,但是我真的很想了解此功能中的步骤。

2 个答案:

答案 0 :(得分:3)

假设您具有以下随机数据帧

import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.rand(5,3), columns=list('ABC'))
df

string.substring

现在,让我们看看您拥有的这个功能

def highlight_max(s):
    is_max = s == s.max()
    return ['background-color: green' if v else '' for v in is_max]

因此,基本上,此函数使用每一列并标记每一列的最大值。让我们将其应用于您的数据框并查看输出:

df.apply(highlight_max)

enter image description here

如您所见,我们还有另一个与df相同大小的数据框。所有值都是空字符串,除了每列中的最大值具有字符串'background-color: green'

现在,我们将此新数据框应用于原始数据框,但具有样式功能。

df.style.apply(highlight_max)

enter image description here

就是这样。每个没有样式的单元格都与以前相同,每个带有'background-color: green'的单元格都为绿色。

答案 1 :(得分:2)

该代码段直接来自大熊猫documentation,但是您剩下了一个至关重要的部分,那就是该函数的调用方式:

df.style.apply(highlight_max)

这是使用.style.apply函数的,如果您不了解第一个文档页面,则会导致您查找Styler.apply的文档。这些文档告诉我们:

逐列,逐行或逐表应用函数。

使用结果更新HTML表示形式。

它也说明了您要传递给它的功能(粗体部分是我的评论):

func (即您的highlight_max应该取SeriesDataFrame(取决于axis)并返回形状相同的物体。

好的,现在让我们来看一下您的功能,我添加了类型提示以使其更清晰

def highlight_max(s: pd.Series) -> Sequence[str]:
    is_max = s == s.max()
    return ['background-color: green' if v else '' for v in is_max]

因此,此函数接受熊猫系列,并输出与该系列大小相同的字符串列表。它将包含CSS样式字符串,这些样式应该应用于显示熊猫表的HTML。特别是,您的函数将background-color属性设置为绿色。

假设您的表格有2列和3行。对于每一列,此函数都需要输出如下列表:

[
    "",
    "background-color: green",
    "",
]

如果您希望该列的第二行为绿色。

但是您不希望在第二行使用此方法,而希望在包含该列最大值的任何行使用它。那么,您如何找到呢?一种方法是制作布尔序列

is_max = s == s.max()

这将构成一个这样的系列(我将以列表形式编写)(假设最大值位于第二行)

[
    False,
    True,
    False,
]

这样可以处理is_max

下一行仅使用CSS将布尔系列转换为列表。如果您不知道那是什么,请使用[列表理解](https://www.programiz.com/python-programming/list-comprehension},然后再继续学习在线python基础课程。

但是让我们将其写为for循环:

css = []
for v in is_max:
    if v:  # same as if v is True
        css.append("background-color: green")
    else:
        css.append("")
return css

顺便说一句,我感到奇怪的是,当我假设您可以使用熊猫的向量化时,熊猫文档决定为此使用循环:

is_max = s == s.max()
css = s.copy()
css[is_max] = "background-color: green"
css[~is_max] = ""