我想突出显示 pandas 数据框列中未通过此有效性检查的所有单元格,颜色为“红色”。这是我的代码。在我的实现中,整列电子邮件以红色突出显示,而不是单个单元格。
# raw data
df = pd.DataFrame({'Username' : ['arenzo', 'brenzo', 'crenzo', 'drenzo'],
'Email' : ['place1@sales.org', 'place2@sales.org', 'place3@sales.com', 'place4@stack.net']})
# email validity function
def emailcheck (df):
validcode = (df['Email'].str.contains('@')) & (df['Email'].str.contains('.org', case= False) & (df['Email'].str.contains('sales', case=False)))
return validcode
def highlight_email(s):
if emailcheck(df).all():
color = ''
else:
color = 'red'
return 'background-color: %s' % color
df.style.applymap(highlight_email, subset=pd.IndexSlice[:, ['Email']])
# dataframe
Username Email
arenzo place1@sales.org
brenzo place2@sales.org
crenzo place3@sales.com
drenzo place4@stack.net
# last 2 rows under email column should be highlighted red
请您参考如下方法:
您目前正在根据您的条件检查整个数据框
validcode = (df['Email'].str.contains('@')) & (df['Email'].str.contains('.org', case= False) & (df['Email'].str.contains('sales', case=False)))
那么您正在测试 if 语句中上述所有值是否为 True
if emailcheck(df).all():
color = ''
这将始终从您的数据中返回 false,因为数据中的某些值符合您的标准,而其他值则不符合。由于该 if 语句的评估为假,您的函数将为每个单元格返回红色。相反,只需保留第二个函数并针对单个值进行测试。
def highlight_email(s):
if '@' in s and '.org' in s and 'sales' in s:
color = ''
else:
color = 'red'
return 'background-color: {c}'.format(c=color)
