Mar*_*lio 5 python dataframe pandas
我正在使用Python Pandas来处理两个数据帧.第一个数据框包含来自客户数据库(名字,姓氏,电子邮件等)的记录.第二个数据框包含域名列表,例如gmail.com,hotmail.com等.
当电子邮件地址包含第二个列表中的域名时,我试图从客户数据框中排除记录.换句话说,当他们的电子邮件地址域出现在域黑名单中时,我需要删除客户.
以下是示例数据帧:
>>> customer = pd.DataFrame({'Email': [
"bob@example.com",
"jim@example.com",
"joe@gmail.com"], 'First Name': [
"Bob",
"Jim",
"Joe"]})
>>> blacklist = pd.DataFrame({'Domain': ["gmail.com", "outlook.com"]})
>>> customer
Email First Name
0 bob@example.com Bob
1 jim@example.com Jim
2 joe@gmail.com Joe
>>> blacklist
Domain
0 gmail.com
1 outlook.com
Run Code Online (Sandbox Code Playgroud)
我想要的输出是:
>>> filtered_list = magic_happens_here(customer, blacklist)
>>> filtered_list
Email First Name
0 bob@example.com Bob
1 jim@example.com Jim
Run Code Online (Sandbox Code Playgroud)
到目前为止我尝试过的:
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': [
"bob@example.com",
"jim@example.com",
"joe@gmail.com"], '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)
Run Code Online (Sandbox Code Playgroud)
输出 -
Email First Name
0 bob@example.com Bob
1 jim@example.com Jim
Run Code Online (Sandbox Code Playgroud)