微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Python Pandas – 类似于ISIN,但是“包含”与“精确”匹配

我正在使用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@

@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@

代码 – @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@

@H_502_1@

             Email First Name
0  [email protected]        Bob
1  [email protected]        Jim

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐