Python太慢,无法在for循环中查找字符串中的文本

rqdpfwrv  于 2022-10-22  发布在  Python
关注(0)|答案(2)|浏览(157)

我想***改进循环性能***,它计算文本中单词的出现次数,但现在它运行***大约5分钟,记录5条记录***
Dataframe

No                  Text   
1     I love you forever...*500 other words
2     No , i know that you know xxx *100 words

我的单词列表

wordlist =['i','love','David','Mary',......]

我的字数代码

for i in wordlist :
    df[i] = df['Text].str.count(i)

结果:

No   Text                  I    love  other_words
 1    I love you ...       1      1      4
 2    No, i know ...       1      0      5
qgzx9mmu

qgzx9mmu2#

您可以通过从每个Text值中的单词生成一个Counter,然后将其转换为列(使用pd.Series),将wordlist中不存在的列相加为other_words并删除这些列:

wordlist = list(map(str.lower, wordlist))
counters = df['Text'].apply(lambda t:Counter(re.findall(r'\b[a-z]+\b', t.lower())))
df = pd.concat([df, counters.apply(pd.Series).fillna(0).astype(int)], axis=1)
other_words = list(set(df.columns) - set(wordlist) - { 'No', 'Text' })
df['other_words'] = df[other_words].sum(axis=1) 
df = df.drop(other_words, axis=1)

输出(针对问题中的示例数据):

No                                 Text  i  love  other_words
0   1    I love you forever... other words  1     1            4
1   2  No , i know that you know xxx words  1     0            7

注:

  • 我已将所有单词转换为小写,因此您不必分别计算Ii
  • 我使用了re.findall而不是更明显的split(),因此forever...被计算为单词forever(而不是forever...

相关问题