如何使用str.contains()标记单元格

时间:2019-10-08 21:21:01

标签: pandas

正在清理一个excel文档,并且其中一列(df_i ['Email'])包含电子邮件地址,我需要标记(通过在评论列中添加评论)Gmail和yahoo电子邮件。我创建了排除列表,但是由于某些原因,它仅在我指定要排除的电子邮件索引时才有效。

输入

emails_to_exclude = ('@gmail', '@yahoo')
df_i['Comments'] = np.where(df_i['Email'].str.contains(emails_to_exclude[0] case = False),'to be deleted','')
print(df_i['Comments'])

输出

0                  
1                  
2                  
3                  
4                  
5                  
6                  
7                  
8                  
9                  
10    to be deleted
11                 
12                 
13       

1 个答案:

答案 0 :(得分:0)

这是因为str.contains无法与列表一起使用,您需要使用正则表达式(正则表达式)来将值与用管道OR表示的|语句连接起来。 / p>

例如,请在下次提供您的数据样本:

df_i = pd.DataFrame({'Email' : ['john@yahoo.com','john@outlook.com','john@gmail.com']})
emails_to_exclude = ('@gmail', '@yahoo')

df_i.loc[df_i['Emails'].str.contains('|'.join(emails_to_exclude)),'comments'] = 'to be deleted'
print(df_i)
                 Emails       comments
0    john@yahoo.com  to be deleted
1  john@outlook.com            NaN
2    john@gmail.com  to be deleted

您可以使用以下空格填充NaN列:

df_i['comments'].fillna('')