尝试在样式中使用背景色不确定这是否正确
我认为我应该使用if-elif语句,但它也会给我带来错误。我想我必须对我感兴趣的特定列使用loc或iloc,因为有不同的列
这个代码的主要代码是
ValueError: Function <function flt_cat_style_function_1 at 0x7f08ea52b830> returned the wrong shape.
Result has shape: (1,)
Expected shape: (11, 1)
a=df['flt_cat']
def flt_cat_style_function_1(a):
df['flt_cat'].str.contains(r'VLIFR','background-color: #9400D3')
df['flt_cat'].str.contains(r'LIFR','background-color: #FFA500')
df['flt_cat'].str.contains(r'IFR','background-color: #FF0000')
df['flt_cat'].str.contains(r'MVFR','background-color: #FFFF00')
df['flt_cat'].str.contains(r'VFR','background-color: #00b050')
highlighted=df.style.apply(flt_cat_style_function_1,subset='flt_cat').render()
0 VLIFR
1 LIFR
2 LIFR
3 LIFR
4 IFR
5 IFR
6 MVFR
7 MVFR
8 MVFR
9 MVFR
10 VFR
Name: flt_cat, dtype: object
with open('shtml.html','w') as f:
f.write(highlighted)
您的代码有几个问题:
首先,
Series.str.contains()
的第二个参数是case
,这是一个决定contains函数是否应该匹配区分大小写的布尔值。在代码中,您将背景色字符串放在那里,这些字符串的计算结果为True,但实际上并不是您想要的。您应该看看函数的文档here。你知道吗第二,
Series.str.contains()
返回一个布尔索引,指示序列中的哪些单元格包含字符串,但它不会就地修改序列。所以你的函数flt_cat_style_function_1()
实际上什么都不做。你知道吗第三,由于函数也没有return语句,它将默认返回
None
。但是,df.style.apply()
需要一个返回数组的函数,该数组正好包含11个值(即df
中的行数)。这就是为什么您看到ValueError。你知道吗我建议做以下修改:
首先,将值到背景颜色的映射放入字典:
创建将一个单元格映射到其相应样式的函数:
然后,使用
Styler.applymap
将此函数应用于每个单元格:最后,您可以将
highlighted
保存到您的文件中。你知道吗旁注
这段代码只适用于在Python3.7+中正常工作,因为早期版本不能保证保留字典顺序(尽管Python3.6已经在tact中保留了顺序)。例如,这可能意味着IFR颜色在早期的Python版本中也应用于VLIFR或LIFR单元格。你知道吗
相关问题 更多 >
编程相关推荐