正在清理一个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
答案 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('')