我正在使用Python Pandas处理两个数据框。第一个数据框包含来自客户数据库的记录(名字,姓氏,电子邮件等)。第二个数据框包含域名列表,例如gmail.com,hotmail.com等。
当电子邮件地址包含第二个列表中的域名时,我试图从客户数据框中排除记录。换句话说,当客户的电子邮件地址域出现在域黑名单中时,我需要删除该客户。
以下是示例数据帧:
>>> 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
我想要的输出将是:
>>> filtered_list = magic_happens_here(customer, blacklist)
>>> filtered_list
Email First Name
0 [email protected] Bob
1 [email protected] Jim
到目前为止,我已经尝试过:
df1[df1['email'].isin(~df2['email'])
...但对于我在这里明显描述的用例却无济于事。df.apply
,但是无法正确使用语法,并且我认为实际数据集的性能将很糟糕。范例:df1['Email'].apply(lambda x: x for i in ['gmail.com', 'outlook.com'] if i in x)
。尽管这看起来应该可行,但我明白了TypeError: 'generator' object is not callable
。剩下的问题是:
代码 -
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)
输出 -
Email First Name
0 [email protected] Bob
1 [email protected] Jim
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句