首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在dataframe的行中搜索特定的字符串,如果字符串存在,则在python的另一列中进行标记

在dataframe的行中搜索特定的字符串,如果字符串存在,则在python的另一列中进行标记
EN

Stack Overflow用户
提问于 2020-09-10 04:11:45
回答 1查看 33关注 0票数 0

我有一个包含两列的数据帧

当前数据帧

代码语言:javascript
复制
SE#     Response                                                                COVID Words Mentioned
123456  As a merchant I appreciated your efforts in pricing with Covid-19       
456789  you guys suck and didn't handle our relationship during this pandemic   
347896  I love your company                                                     

所需的数据帧

代码语言:javascript
复制
SE#     Response                                                                COVID Words Mentioned
123456  As a merchant I appreciated your efforts in pricing with Covid-19       Y
456789  you guys suck and didn't handle our relationship during this pandemic   Y
347896  I love your company                                                     N

术语=‘病毒’,‘新冠肺炎’,'covid19',‘流感’,'COVID','Corona','corona',‘新冠肺炎’,‘COVID19’,'Corona病毒‘,’Corona病毒‘,'covid',’普雷尔‘,’流行病‘,’Corona‘,’Corona‘

这些是需要在每个响应中检查的字符串列表。目标是能够在术语列表中添加或删除元素。

以上只是记录的例子。我有一个与新冠肺炎相关的字符串列表,需要在每个响应中进行搜索。如果存在任何字符串,请在“提到的COVID单词”列中,标记"Y“和"N”,如果这些单词没有出现。

我该如何用python编写代码呢?

非常感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-10 04:18:02

对于每个搜索词,设置一个结果向量:

代码语言:javascript
复制
d = {}
for i in LIST_OF_STRINGS:
    d[i] = df['response'].str.contains(i, na=False)

我传递na=False,因为否则,Pandas将在字符串列本身为NA的情况下填充NA。我们不想要这种行为。随着搜索项数量的增加,操作的复杂度迅速增加。如果您想要匹配整个单词,还可以考虑更改此函数,因为contains匹配子字符串。

无论如何,获取结果并使用逐位and来减少它们。您需要两个导入:

代码语言:javascript
复制
from functools import reduce
from operator import and_

df[reduce(and_, d.values())]

这里的最后一行只选择包含任何单词的元素。或者,您可以尝试使用np.where将缩减的输出从{True, False}映射到{'Y', 'N'}

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63818908

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档