Я пытаюсь применить функцию очистки электронной почты к столбцу и записать результат в отдельный столбец.
Я не совсем уверен, как применить функцию к двум столбцам с .apply()
, но вот что я попробовал:
Сначала настройте фрейм данных и словарь обычной электронной почты.ошибки:
import pandas as pd
df = pd.DataFrame({'emails':['jim@gmailcom','bob@gmail.com','mary@gmaicom','bobby@gmail.com'],
'result':['','','','']})
df
emails result
0 jim@gmailcom
1 bob@gmail.com
2 mary@gmaicom
3 bobby@gmail.com
# common mistakes:
correct_domain = {'gmailcom': 'gmail.com',
'gmaicom': 'gmail.com',
'gmaillom': 'gmail.com',
'gmalcom': 'gmail.com'}
Теперь я хочу просмотреть электронные письма и заменить неправильно введенный домен на правильный.Например.gmailcom -> gmail.com
def clean_emails(x):
# for each domain(key) in this dict ( e.g. 'gmailcom':'gmail.com')
for mistake in correct_domain:
# if incorrect domain ('gmailcom') is in the email we're checking
if mistake in x['emails']:
# replace it with the dict value which is the correctly formatted domain ('gmail.com')
x['emails'] = x['emails'].replace(mistake ,correct_domain[mistake ])
# record result
x['result'] = 'email cleaned'
else:
x['result'] = 'no cleaning needed'
И тогда я получаю None, когда применяю эту функцию:
df.apply(clean_emails,axis=1)
0 None
1 None
2 None
3 None
dtype: object
Я пытался использовать return
в миксе, но не смогвыяснить два отдельных возврата для отдельных столбцов.
Мой желаемый результат, электронные письма были очищены и результат записан в result
:
emails result
0 jim@gmail.com 'email cleaned'
1 bob@gmail.com 'no cleaning needed'
2 mary@gmail.com 'email cleaned'
3 bobby@gmail.com 'no cleaning needed'
edit: Я думал добавить return x
в конецФункция будет возвращать вновь отредактированные строки, но электронные письма не были очищены.
emails result
0 jim@gmail.com email cleaned
1 bob@gmail.com no cleaning needed
2 mary@gmaicom no cleaning needed
3 bobby@gmail.com no cleaning needed