Python 带有for循环和if-else语句的Lambda函数
我有一个像这样的数据帧Python 带有for循环和if-else语句的Lambda函数,python,pandas,lambda,Python,Pandas,Lambda,我有一个像这样的数据帧df index Posts clean_text 0 Hi I am fine. [Hi, I, am, fine] 1 You are a piece of shit. [You, are, a, piece, of, shit] . . . 我有一个名为corpus的列表,其中有3000个脏话 我想通过检查所有行的条件,浏览列clean_text,并将一个新行re
df
index Posts clean_text
0 Hi I am fine. [Hi, I, am, fine]
1 You are a piece of shit. [You, are, a, piece, of, shit]
.
.
.
我有一个名为corpus
的列表,其中有3000个脏话
我想通过检查所有行的条件,浏览列clean_text
,并将一个新行result
添加到df
。条件是:
如果clean_text
列中任何一行的列表中的任何一个单词出现在语料库中,则列的结果将具有字符串无关
,否则相关
示例:如果列表中的任何单词[Hi,I,am,fine]
出现在语料库中
,则列结果将具有无关
,否则相关
。由于此列表没有任何脏话,因此输出应该是相关的
所需输出为:
index Posts clean_text result
0 Hi I am fine. [Hi, I, am, fine] Relevant
1 You are a piece of shit. [You, are, a, piece, of, shit] Irrelevant
.
.
.
我想用lambda函数来做这个。到目前为止,我已经这样做了-
df['result']=df['clean_text'].map(lambda x:[如果w不在语料库中,则与x中的w相关])
首先,我无法在这里编写else
部分,其次,它显示了如下所示的不良输出
index Posts clean_text result
0 Hi I am fine. [Hi, I, am, fine] [Relevant, Relevant, Relevant, Relevant]
1 You are a piece of shit. [You, are, a, piece, of, shit] [Relevant, Relevant, Relevant,...]
.
.
.
我也尝试过像这样编写一个“for”循环,但这需要很多时间:
for i in range(df.shape[0]):
for word in df.loc[i]['clean_text']:
if word in corpus:
df['result'] = "Irrelevant"
#break
else:
#continue
df['result'] = "Relevant"
请帮助我使用lambda函数获得所需的输出。使用corpus=set(corpus)
然后你可以用
df['clean_text'].map(lambda l: "Relevant" if any(x in corpus for x in l) else "Irrelevant")
请注意,您使用的是lambda
,这一事实实际上并不相关。你本可以这样做:
def search_corpus(tokens):
if any(token in corpus for token in tokens):
return "Relevant"
return "Irrelevant"
并且做:
df['clean_text'].map(search_corpus)
这不会影响性能<代码>lambda
表达式不会创建任何特殊的内容,而且您永远不必使用它。为什么它必须是lambda表达式?为什么不是一个常规的函数定义呢?可能最大的问题是,您使用的是语料库列表。您应该使用集合
@juanpa.arrivillaga,集合如何帮助?因为集合
中的成员资格测试是固定时间,而列表中是线性时间。@juanpa.arrivillaga我可以将其更改为集合。感谢您的解决方案。另外,是否有一种方法可以检查哪些单词与语料库中的单词匹配,并将它们添加到单独的列中。@dipanjana为什么不map(lambda l:[x代表语料库中的x如果语料库中的x])