Skip to main content
 首页 » 编程设计

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

2024年12月31日29lidabo

我想突出显示 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)