首页 > 解决方案 > 通过推文的pandas字符串列中的单词列表查找子字符串

问题描述

我有一个 csv 文件,其中有一列clean_tweets包含推文(不是拆分文本,它只是推文的整个(字符串)文本)。

我还有一个子字符串列表(raw_lst下面的变量),并想创建一个列表(在一个新列中),其中包括raw_lst每条推文中所有子字符串的出现(intensityFinal下面的变量)。我还想让代码(1)允许子字符串以任何形式出现(例如,补偿、补偿等)和(2)对字母的大小写不敏感,这样它也可以选择,比如“道歉”以及“补偿”

我的最终目标是有一个列来指示我的子字符串在每条推文中出现了多少次raw_lst

这是我的代码,但它不起作用:

import numpy as np
import pandas as pd
df=pd.read_csv('tweets.csv')

raw_lst = ["apolog",
          "compens"]

df['intensityFinal'] = np.empty((len(df), 0)).tolist()

  
for element in raw_lst:
    df["intensity"]= df['tweets_clean'].str.findall(element) 
    pd.concat(["intensity", "intensityFinal"])

df["intensityLength"]= df['intensityFinal'].str.len()
print(df) 

标签: pythonpandas

解决方案


您可以通过|正则表达式或将值提取到新列来加入列表的所有值:

df=pd.read_csv('tweets.csv')

raw_lst = ["apolog",
           "compens"]

df["intensityFinal"] = df['tweets_clean'].str.count('|'.join(raw_lst)) 

print (df)

编辑:仅提取单词compens而不recompense使用单词边界:

pat = '|'.join(r"\b{}\b".format(x) for x in raw_lst)
df["intensityFinal"] = df['tweets_clean'].str.count(pat) 

推荐阅读