Python:比较数据帧中的两个字符串列表
我想检查标签列表中的每个单词是否存在于“bigrams”列中的每个列表中 如果这些单词中有一个在二元列表中,我想用存在的单词替换标签none 我试图写两个连续的for循环,但它不起作用。我还尝试了一个理解列表 我该怎么办Python:比较数据帧中的两个字符串列表,python,pandas,dataframe,Python,Pandas,Dataframe,我想检查标签列表中的每个单词是否存在于“bigrams”列中的每个列表中 如果这些单词中有一个在二元列表中,我想用存在的单词替换标签none 我试图写两个连续的for循环,但它不起作用。我还尝试了一个理解列表 我该怎么办 您可以使用pd.Series.str.extract df = pd.DataFrame({'bgrams': [['hello','goodbye'],['dog','cat'],['cow']], 'label':[None,None,None]}) df #
您可以使用
pd.Series.str.extract
df = pd.DataFrame({'bgrams': [['hello','goodbye'],['dog','cat'],['cow']], 'label':[None,None,None]})
df
# bgrams label
#0 [hello, goodbye] None
#1 [dog, cat] None
#2 [cow] None
labels=['cat','goodbye']
regex='('+'|'.join(labels)+')'
df['label']=df.bgrams.astype(str).str.extract(regex)
输出:
df
bgrams label
0 [hello, goodbye] goodbye
1 [dog, cat] cat
2 [cow] NaN
df
bgrams label
0 [hello, goodbye, cat] [goodbye, cat]
1 [dog, cat] [cat]
2 [cow] []
对于多个匹配项,可以使用
pd.Series.str.findall
:
df = pd.DataFrame({'bgrams': [['hello','goodbye','cat'],['dog','cat'],['cow']], 'label':[None,None,None]})
df
# bgrams label
#0 [hello, goodbye, cat] None
#1 [dog, cat] None
#2 [cow] None
labels=['cat','goodbye']
regex='('+'|'.join(labels)+')'
df['label']=df.bgrams.astype(str).str.findall(regex)
输出:
df
bgrams label
0 [hello, goodbye] goodbye
1 [dog, cat] cat
2 [cow] NaN
df
bgrams label
0 [hello, goodbye, cat] [goodbye, cat]
1 [dog, cat] [cat]
2 [cow] []
非常感谢你的回答。它对我很有帮助。“LJRB,如果它对你有用的话,请考虑,谢谢:”它有效,但不是我列表中的所有单词。当我创建变量regex时,新列表将一些单词颠倒过来。例如,如果我有“guerre病毒”,它会将这两个词颠倒过来。所以也许它不会发现“格雷尔病毒”。我想找到“guerre病毒”或“病毒guerre”。