我正在使用Python Pandas来处理两个数据帧.第一个数据框包含来自客户数据库(名字,姓氏,电子邮件等)的记录.第二个数据帧包含域名列表,例如gmail.com,hotmail.com等@H_502_1@
当电子邮件地址包含第二个列表中的域名时,我试图从客户数据框中排除记录.换句话说,当他们的电子邮件地址域出现在域黑名单中时,我需要删除客户.@H_502_1@
以下是示例数据帧:@H_502_1@
@H_502_1@
>>> customer = pd.DataFrame({'Email': [
"[email protected]",
"[email protected]",
"[email protected]"], 'First Name': [
"Bob",
"Jim",
"Joe"]})
>>> blacklist = pd.DataFrame({'Domain': ["gmail.com", "outlook.com"]})
>>> customer
Email First Name
0 [email protected] Bob
1 [email protected] Jim
2 [email protected] Joe
>>> blacklist
Domain
0 gmail.com
1 outlook.com
@H_502_1@
>>> filtered_list = magic_happens_here(customer, blacklist)
>>> filtered_list
Email First Name
0 [email protected] Bob
1 [email protected] Jim
到目前为止我尝试过的:@H_502_1@
>为了消除特定的电子邮件地址,过去我使用过df1 [df1 [’email’].isin(~df2 [’email’])…但对我在这里描述的用例没有帮助明显.
>我尝试过使用df.apply,但无法正确使用语法,我认为实际数据集的性能会很糟糕.示例:df1 [‘Email’].apply(lambda x:x代表[‘gmail.com’中的i,’outlook.com’]如果我在x中).虽然这似乎应该有效,但我得到TypeError:’generator’对象不可调用.@H_502_1@
剩下的问题是:@H_502_1@
>这里最好的方法是什么?
>为什么发电机不能调用?
> …最终,当排除集中存在电子邮件地址域时,如何从数据框中排除客户?@H_502_1@
@H_502_1@
import pandas as pd
customer = pd.DataFrame({'Email': [
"[email protected]",
"[email protected]",
"[email protected]"], 'First Name': [
"Bob",
"Jim",
"Joe"]})
blacklist = pd.DataFrame({'Domain': ["gmail.com", "outlook.com"]})
invalid_emails = tuple(blacklist['Domain'])
df = customer[customer['Email'].apply(lambda s: not s.endswith(invalid_emails))]
print(df)
@H_502_1@
Email First Name
0 [email protected] Bob
1 [email protected] Jim
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。