【发布时间】:2020-08-26 20:36:05
【问题描述】:
我有一个包含数千个 cmets 的列的 pandas 数据框。我想遍历列中的每一行,检查评论是否包含在我创建的单词列表中找到的任何单词,如果评论包含我列表中的单词,我想将其标记为一个单独的列。到目前为止,这是我的代码中的内容:
retirement_words_list = ['match','matching','401k','retirement','retire','rsu','rrsp']
def word_checker(row):
for sentence in df['comments']:
if any(word in re.findall(r'\w+', sentence.lower()) for word in retirement_words_list):
return '401k/Retirement'
else:
return 'Other'
df['topic'] = df.apply(word_checker,axis=1)
即使我已经仔细检查了许多 cmets 是否包含我列表中的一个或多个单词,代码也会将我的数据框中的每条评论都标记为“其他”。关于如何更正我的代码的任何想法?非常感谢您的帮助。
【问题讨论】:
-
类似于这里的第一个选项:stackoverflow.com/questions/61390726/…?只需将
case=False指定为str.contains的参数 -
将
retirement_words_list更改为一个集合可能会加快查找速度。测试列表中的成员身份是 O(n),而测试集合中的成员身份是 O(1) - 详细信息:wiki.python.org/moin/TimeComplexity -
@jsmart 这取决于它的使用方式。目前代码没有使用
retirement_words_list进行包含测试,仅用于迭代。
标签: python pandas dataframe if-statement any