我能够根据以下内容应用样式:
f = lambda v: 'background-color: %s' % 'green' if v=='col' else ''
df = df.style.applymap(f, subset=['a'])
我现在的挑战是我想在不同的列上做更多的过滤器。因此,如果我尝试再次在
style.applymap
上应用此 df
,我会收到标题中提到的错误。因为它可以应用于 DF 而不是 styler 对象。
作为一种解决方法,我发现对样式对象使用
df.data.style.applymap
,但它不会保留以前的样式。
我有多个过滤条件,可能涉及已应用样式的相同列。
如何依次应用多种样式?检查了文档但没有找到任何东西
在数据帧上应用样式会返回一个 Styler 对象,而不是 DataFrame。您无法对其应用进一步的样式操作。
您可以做的是通过单个
apply
/applymap
应用所有样式操作。
如果这太复杂,一个不太好的技巧是创建新列以使所有样式成为可能,然后使用样式操作隐藏这些列。
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;"')
以下方法对我有用。由于 df.style 返回 styler 对象,您只需使用该对象来应用不同的样式。每次使用 df.style 时,它都会返回一个新的 styler 对象,因此您不能使用多个 df.style
# this line is the key point
df_style = df.style
xxxxxxx
df_style.map(mark_color, subset_status, color='yellow')
xxxxx
df_style.map(mark_color, subset_studentid, color='green')
xxxxx
# save the style and output the excel, note that use the df_style instead of the df
df_style.to_excel(writer, index=False, engine="openpyxl", sheet_name='Details')