Python:比较数据帧中的两个字符串列表

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 #

我想检查标签列表中的每个单词是否存在于“bigrams”列中的每个列表中

如果这些单词中有一个在二元列表中,我想用存在的单词替换标签none

我试图写两个连续的for循环,但它不起作用。我还尝试了一个理解列表

我该怎么办


您可以使用
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”。