[英]Python: Looping through Pandas DataFrame to match string in a list
我的问题是关于Pandas DataFrame和电子邮件地址列表的。 简化的数据帧(称为“ df”)如下所示:
Name Address Email
0 Bush Apple Street
1 Volt Orange Street
2 Smith Kiwi Street
电子邮件地址的简化列表如下所示:
list_of_emails = ['johnsmith@gmail.com', 'judyvolt@hotmail.com', 'bush@yahoo.com']
是否可以遍历数据框,检查姓氏是否是电子邮件地址(的一部分),然后将该电子邮件地址添加到数据框? 由于我认为第2行,以下代码无法正常运行:
for index, row in df.iterrows():
if row['Name'] in x for x in list_of_emails:
df['Email'][index] = x
非常感激你的帮助!
通常,您应该考虑仅将iterrows
作为最后的手段。
考虑一下:
import pandas as pd
df = pd.DataFrame({'Name': ['Smith', 'Volt', 'Bush']})
list_of_emails = ['johnsmith@gmail.com', 'judyvolt@hotmail.com', 'bush@yahoo.com']
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 johnsmith@gmail.com
# 1 Volt judyvolt@hotmail.com
# 2 Bush bush@yahoo.com
这是使用apply
和Lambda函数的一种方法
首先,
In [450]: df.Name.apply(
lambda x: next((e for e in list_of_emails if x.lower() in e), None))
Out[450]:
0 johnsmith@gmail.com
1 judyvolt@hotmail.com
2 bush@yahoo.com
Name: Name, dtype: object
对于所有比赛,在列表中
In [451]: df.Name.apply(lambda x: [e for e in list_of_emails if x.lower() in e])
Out[451]:
0 [johnsmith@gmail.com]
1 [judyvolt@hotmail.com]
2 [bush@yahoo.com]
Name: Name, dtype: object
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.