gpt4 book ai didi

Python Pandas - 根据列表删除多个值

转载 作者:太空宇宙 更新时间:2023-11-04 07:59:07 25 4
gpt4 key购买 nike

我正在尝试从模糊匹配列表中项目的数据框中删除值。

我有一个数据框 (test_df),如下所示:

   id          email         created_at      
0 1 son@mail_a.com 2017-01-21 18:19:00
1 2 boy@mail_b.com 2017-01-22 01:19:00
2 3 girl@mail_c.com 2017-01-22 01:19:00

我有一个包含数百个电子邮件域的列表,我正在从一个 txt 文件中读取这些域,如下所示:

mail_a.com
mail_d.com
mail_e.com

我试图从数据框中删除包含匹配电子邮件域的任何行,使用:

email_domains = open('file.txt', 'r')
to_drop = email_domains.read().splitlines()
dropped_df = test_df[~test_df['email'].isin(to_drop)]
print(test_df)

所以,结果应该是这样的:

   id          email         created_at       
0 2 boy@mail_b.com 2017-01-22 01:19:00
1 3 girl@mail_c.com 2017-01-22 01:19:00

但是带有“son@mail_a.com”的第一行没有被删除。有什么建议么?

最佳答案

从电子邮件中解析域名非常容易,所以我们可以先使用 .str.split('@') 解析域名,然后使用 isin()方法:

In [12]: df[~df.email.str.split('@').str[1].isin(domains.domain)]
Out[12]:
id email created_at
1 2 boy@mail_b.com 2017-01-22 01:19:00
2 3 girl@mail_c.com 2017-01-22 01:19:00

哪里:

In [13]: domains
Out[13]:
domain
0 mail_a.com
1 mail_d.com
2 mail_e.com

关于Python Pandas - 根据列表删除多个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43596020/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com