【问题标题】:Styler object has no attribute styleStyler 对象没有属性 style
【发布时间】:2021-08-24 09:14:41
【问题描述】:

This is a follow up question on applying background color to a dataframe based on condition

我可以根据以下内容应用样式:

f = lambda v: 'background-color: %s' % 'green' if v=='col' else ''
df = df.style.applymap(f, subset=['a'])

我现在的挑战是我想在不同的列上做更多的过滤器。所以如果我再次尝试在df 上应用这个style.applymap,我会得到标题中提到的错误。因为它可以应用于 DF 而不是 styler 对象。

作为一种解决方法,我发现将df.data.style.applymap 用于样式化对象,但它不会保留以前的样式。

我有多个过滤条件,可能涉及已应用样式的相同列。

我怎样才能一个接一个地应用多种样式?检查了文档,但没有找到任何东西

【问题讨论】:

  • This answer 解决了将多种样式应用于同一 DataFrame 的方法。

标签: python pandas pandas-styles


【解决方案1】:

在数据框上应用样式返回Styler object,而不是数据框。您不能对其应用进一步的样式操作。

您可以做的是使用单个 apply/applymap 应用所有样式操作。

如果这太复杂,一个不太好的技巧是创建新列以使您的所有样式成为可能,然后使用样式操作隐藏这些列。

【讨论】:

  • 无法通过单一应用应用所有过滤器,因为不同列的过滤器不同
【解决方案2】:
f = lambda v: 'background-color: %s' % 'green' if v=='col' else ''
df = df.style.applymap(f, subset=['a'])

如果您使用单一样式,则表示上述代码可以正常工作。如果您使用多种样式,则意味着删除该样式。

def format_color_groups(values):
    if values =='Y':
        return  'color:red;border-collapse: collapse; border: 1px solid black;'
    elif values  == 'N':
        return  'color:green;border-collapse: collapse; border: 1px solid black;'
    else:
        return  'border-collapse: collapse; border: 1px solid black;'

df = df.style.applymap(format_color_groups)
#now df is styler so no need to add style
df = df.set_table_attributes('style="border-collapse: collapse; border: 1px solid black;"')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-01
    • 2021-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多