首页 > 解决方案 > 熊猫风格的循环无法正常工作

问题描述

我在 Pandas 中有一个数据框,其中包含行星名称和有关每个行星的信息。行星名称存储在标题为“行星”的列下。我想突出显示特定行星、地球、土星和火星的行。出于某种原因,当我运行此脚本并导出为 Excel 文件时,只有 highlight_planets 列表中的第一个行星被突出显示。在这种情况下,只有地球被突出显示(土星和火星没有被突出显示)。如果我将土星移动到第一个位置并将地球移动到第二个位置,则只有土星行会在数据框中突出显示。如何突出显示我的行星列包含地球、土星或火星的所有行?

谢谢。

def highlight_sentiment(row):

    highlight_planets = ['Earth', 'Saturn', 'Mars']

    for m in highlight_planets:


        if row['planet'] == m:
           return ['background-color: yellow'] * len(row)
        else:
           return ['background-color: white'] * len(row)

df.style.apply(highlight_sentiment, axis=1)

df = df.style.apply(highlight_sentiment, axis=1)
df.to_excel("df_test.xlsx", index = False)

标签: pythonpandashighlightpandas-styles

解决方案


在您的for循环中,return如果行星不是您列表中的第一个值,您将立即。

将最后一条return语句移到循环之外,这样如果行星与列表中的任何for都不匹配,它只会返回白色背景。

def highlight_sentiment(row):
    highlight_planets = ['Earth', 'Saturn', 'Mars']
    for m in highlight_planets:
        if row['planet'] == m:
           return ['background-color: yellow'] * len(row)
    return ['background-color: white'] * len(row)

顺便说一句,您可以for完全避免循环,只需使用in

def highlight_sentiment(row):
    highlight_planets = ['Earth', 'Saturn', 'Mars']
    if row['planet'] in highlight_planets:
        return ['background-color: yellow'] * len(row)
    return ['background-color: white'] * len(row)

推荐阅读