python pandas dataframe列中的电子邮件验证

2024-05-23 16:13:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我想突出显示pandas dataframe列中未通过此有效性检查的所有单元格颜色为“red”。这是我的密码。在我的实现中,整个列email被突出显示为红色,而不是单个单元格。在

# 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

Tags: orgdataframedfemailusernameredcolorpd
1条回答
网友
1楼 · 发布于 2024-05-23 16:13:12

您当前正在根据您的条件检查整个数据帧

validcode = (df['Email'].str.contains('@')) & (df['Email'].str.contains('.org', case= False) & (df['Email'].str.contains('sales', case=False)))

然后在if语句中测试以上所有值是否为真

^{pr2}$

这将始终从数据中返回false,因为数据中的某些值符合您的条件,而其他值则不符合条件。由于if语句的求值为false,因此函数将为每个单元格返回红色。相反,只需保留第二个函数并根据单个值进行测试。在

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)

相关问题 更多 >