pandas 如果一个特定的 Dataframe 单元格的值不为零,如何将其格式化为红色?

new9mtju  于 2022-12-17  发布在  其他
关注(0)|答案(1)|浏览(126)

我有一个数据框,它计算3件事并输出结果:第一行表示文件中的记录数,第二行表示特定列为空值的记录数(缺失ID的数量),第三行也表示特定列为空值的记录数(缺失名称的数量)。
我想有条件地将某些单元格的格式设置为红色,如果它们是!= 0。
有关我的 Dataframe 内容和我希望有条件地变为红色的内容的更多上下文,请参见下文:

def record_count():
    with open('filename.csv', encoding='utf8') as file:
        record_number = len(list(file))
        print("Number of records on file:", record_number)
        return record_number

def id_check():
    df = pd.read_csv('filename.csv', low_memory=False)
    missing_id = df["id"].isna().sum()
    print("Number of users missing an id:", missing_id)
    return missing_id

def name_check():
    df = pd.read_csv('filename.csv', low_memory=False)
    missing_name = derivs["name"].isna().sum()
    print("Number of users missing a name:", missing_name)
    return missing_name

checks_table = {
    'Check' : ['Record Check', 'ID Check', 'Name Check'],
    'Summary' : ['Number of records on file','Number of records missing an ID', 'Number of users missing a name'],
    'Findings' : [record_count(), id_check(), name_check()]
}

df_checks = pd.DataFrame.from_dict(checks_table)
df_checks.head()

我正在尝试格式化checks_table Dataframe ,以便:

  • Check = ID Check且发现id_check()!= 0且单元格值=红色的任何单元格
  • 或其中Check =名称检查且发现name_check()!= 0,则单元格值=红色

其他一切都可以默认为黑色。

kqqjbcuj

kqqjbcuj1#

使用以下玩具数据框(我猜你的是什么样子):

# In a Jupyter notebook

checks_table = {
    "Check": ["Record Check", "ID Check", "Name Check"],
    "Summary": [
        "Number of records on file",
        "Number of records missing an ID",
        "Number of users missing a name",
    ],
    "Findings": [50, 10, 7],
}

df_checks = pd.DataFrame.from_dict(checks_table)
df_checks

下面是通过定义一个helper函数来实现这一点的一种方法:

def red_if_not_zero(s, **kwargs):
    return ["color: red" if v != 0 else "" for v in df_checks.loc[[1, 2], "Findings"]]

然后,在Jupyter notebook单元格中运行以下代码行:

df_checks.style.apply(red_if_not_zero, subset=([1, 2], "Findings"))

输出:

相关问题