0

My question is regarding a Pandas DataFrame and a list of e-mail addresses. The simplified dataframe (called 'df') looks like this:

   Name    Address         Email
0  Bush    Apple Street
1  Volt    Orange Street
2  Smith   Kiwi Street

The simplified list of e-mail addresses looks like this:

list_of_emails = ['[email protected]', '[email protected]', '[email protected]']

Is it possible to loop through the dataframe, to check if a last name is (part of) a e-mail address AND then add that email address to the dataframe? The following code does not work unfortunately, because of line 2 I think:

for index, row in df.iterrows():
    if row['Name'] in x for x in list_of_emails:
        df['Email'][index] = x

Your help is very much appreciated!

2 Answers 2

4

Generally you should consider using iterrows as last resort only.

Consider this:

import pandas as pd

df = pd.DataFrame({'Name': ['Smith', 'Volt', 'Bush']})

list_of_emails = ['[email protected]', '[email protected]', '[email protected]']

def foo(name):
    for email in list_of_emails:
        if name.lower() in email:
            return email

df['Email'] = df['Name'].apply(foo)

print(df)

#     Name                 Email
# 0  Smith   [email protected]
# 1   Volt  [email protected]
# 2   Bush        [email protected]
Sign up to request clarification or add additional context in comments.

1 Comment

Thanks @DeepSpace! Apply is the function I was looking for!
3

Here's one way using apply and lambda function

For, first match

In [450]: df.Name.apply(
           lambda x: next((e for e in list_of_emails if x.lower() in e), None))
Out[450]:
0     [email protected]
1    [email protected]
2          [email protected]
Name: Name, dtype: object

For all matches, in a list

In [451]: df.Name.apply(lambda x: [e for e in list_of_emails if x.lower() in e])
Out[451]:
0     [[email protected]]
1    [[email protected]]
2          [[email protected]]
Name: Name, dtype: object

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.