我在pandas中有一个文本列,并且我有一个包含一些单词的列表。我需要将每行中的文本与list中的单词进行匹配,并保留它们

时间:2019-05-16 11:35:06

标签: python pandas dataframe

我有train['final_input_text']列,其中包含文本值。我在列表中有一组单词,需要与之匹配 train['final_input_text'].values,如果匹配,则将单词保留在train['final_input_text']中。

train['final_input_text'].values[1] = 'students would rather school home sometimes high poverty'

我尝试使用循环,但无法到达

text_df=train['final_input_text'].values

我只需要在train[final_input_text]中保留与我的列表中的单词匹配的单词,这些单词有大约9000个单词。

3 个答案:

答案 0 :(得分:1)

这将仅使用列表中的单词创建数据框

train = train[train['final_input_text'].isin(words_list)]

答案 1 :(得分:0)

如果列表中的单词是unigram,请遵循以下方法:

 list_words = ['word1','word2','word3','word4']
 for x in range(len(train)):
     for w in list_words:
         if w in train['final_input_text'][x]:
            train['word in final_input'][x] = w

答案 2 :(得分:0)

您可以使用split功能来比较您的文字和特定单词。然后使用join函数将找到的匹配词聚合回单个字符串。

这是一个可行的示例:

df_text = pd.DataFrame({'final_input_text':['hello my name is Bob','I like the name Bob']})

In [1] : print(df_text)
Out[1] : final_input_text
0   hello my name is Bob
1   I like the name Bob

words_to_match = ['name', 'Bob', 'hello', 'world']

for index, row in df_text.iterrows():
    words_to_keep = []
    for word in row[0].split(' '):
        if word in words_to_match :
            words_to_keep.append(word + ' ')
    df_text.loc[index, 'final_input_text']= ''.join(words_to_keep)

In [2] : print(df_text)
Out[2] :    final_input_text
0   hello name Bob
1   name Bob