pandas 如何在def函数中引用单个列

vq8itlhq  于 2022-11-05  发布在  其他
关注(0)|答案(3)|浏览(113)

首先,我知道使用正则表达式不是最好的电子邮件验证,但这是一个初步的步骤,一个更好的验证是以后。
我想创建一个验证电子邮件地址是否有效的函数,但我不确定如何在数据框中仅引用一列。

import pandas as pd

d=[['Automotive','testgmail.com','bob','smith']]
df=pd.DataFrame(d,columns=['industry','email','first',last])

filename='temp'

我希望将代码保存在如下所示的def函数中

def Prospect(colname,errors):
   wrong=[]
   if #reference to column.str.match(r"^.+@.+\..{2,}$"):
       return
    else:
    error='this is an invalid email'
    wrong.append(error)
       return wrong

print(Prospect(errors,colname))

如何创建一个函数,使其仅引用数据框中的特定列,并仅通过该函数运行该列名,然后创建一个打印语句,说明该电子邮件无效?
附言:由于数据集并不庞大,因此操作速度不是一个大问题。
所需输出:

This is an invalid email
bqjvbblv

bqjvbblv1#

我相信您可能想要:

def Prospect(colname, errors, df=df):

    m = df[colname].str.match(r"^.+@.+\..{2,}$")

    if m.all():
        pass
    else:
        error='this is an invalid email'
        errors.append(error)

errors = []
Prospect('email', errors, df=df)

print(errors)

输出:['this is an invalid email']

q7solyqu

q7solyqu2#

import pandas as pd
import re

d=[['Automotive','testgmail.com','bob','smith'],
   ['Automotive','test@gmail.com','bob','smith']]
df=pd.DataFrame(d,columns=['industry','email','first','last'])

email_regex = regex = '^[a-zA-Z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$'

df["email"].apply(lambda email: print("This is a valid email: " + email if re.search(email_regex,email) else "This is an invalid email: " + email))

结果:

This is an invalid email: testgmail.com
This is a valid email: test@gmail.com

Process finished with exit code 0
ckx4rj1h

ckx4rj1h3#

好的,下面是我对你的问题的看法(我已经删除了“错误”的论点,直到我明白它应该是什么/做什么):

import pandas as pd
import re

d=[['Automotive','testgmail.com','bob','smith'],
   ['Automotive','test@gmail.com','bob','smith']]
df=pd.DataFrame(d,columns=['industry','email','first','last'])

def Prospect(colname):
    email_regex = r"^.+@.+\..{2,}$"
    wrong=[]
    for i in range(len(df)):
        this_email = df[colname][i]
        if re.search(email_regex,this_email):
            continue
        else:
            error=f'{this_email} is an invalid email'
            wrong.append(error)
    return wrong

print(Prospect('email'))

# ['testgmail.com is an invalid email']

相关问题