我有一个看起来像这样的数据集:
ID Symptoms
1 ear, fever
2 hearing loss
3 hurt ear
4 spear wound
5 bad hearing
6 earring cut
我只希望标记“ ear”出现的记录。因此,例如,输出将如下所示:
ID Symptoms Ear
1 ear, fever 1
2 hearing loss 0
3 hurt ear 1
4 spear wound 0
5 bad hearing 0
6 earring cut 0
我尝试了一些代码,但收效甚微:
问题:此代码将提取带有“ ear”文本的任何内容
LABS_TAT.loc[:,"Ear"]=np.where(LABS_TAT["Symptoms"].str.contains("ear", case=False),1,0)
注意“ ear”之后的空格,此代码不会标记“ hurt ear”记录
LABS_TAT.loc[:,"Ear"]=np.where(LABS_TAT["Symptoms"].str.contains("ear ", case=False),1,0)
请注意“耳朵”前的空格,该代码不会标记“耳朵发烧”记录
LABS_TAT.loc[:,"Ear"]=np.where(LABS_TAT["Symptoms"].str.contains(" ear", case=False),1,0)
如何修复我的代码,使其标记带有“ ear”一词的所有记录?我觉得这里有一个简单的答案,但我还是python的新手。
答案 0 :(得分:1)
将Series.str.contains
与正则表达式一起使用:
dic
结果:
df['Ear'] = df['Symptoms'].str.contains(r'(?i)\bear\b').astype(int)
答案 1 :(得分:1)
由于.contains()
采用了正则表达式模式,因此应该像.contains(r"\bear\b", case=False)
一样简单。
\b
表示单词限制字符。您可以在Python standard library documentation中了解有关正则表达式的更多信息。