如何将列表中的特定单词匹配到 pandas 列?
How to match particular word in the list to pandas column?
a = ['bed', 'mattress', 'sheets', 'pillow', 'admission kits']
df = pd.DataFrame({'sr.no':[1,2,3,4,5], 'des': ['2 bed rooms', 'natural language processing', '2x2 sheets grabs', '2 meter long pillow', '2x30mm long']})
df = sr.no des
1 2 bed rooms
2 natural language processing
3 2x2 sheets grabs
4 2 meter long pillow
5 2x30mm long
这是列表 'a' 和数据框 'df'。所以在这里我想将列表 'a' 中的元素与数据框列 'des' 匹配。如果 'a' 单词列表出现在 'des' 列中,则打印匹配的单词,否则打印不匹配。
这是我想要的输出:
out= sr.no des output
1 2 bed rooms bed
2 natural language processing not match
3 2x2 sheets grabs sheets
4 2 meter long pillow pillow
5 2x30mm long not match
如何使用 python 执行此操作?
如果我们只想看是否匹配,可以使用str.contains
进行校验,np.where
进行赋值:
df['output'] = np.where(df['des'].str.contains('|'.join(a)), 'match', 'not match')
输出:
sr.no des output
0 1 2 bed rooms match
1 2 natural language processing not match
2 3 2x2 sheets grabs match
3 4 2 meter long pillow match
4 5 2x30mm long not match
不要使用 split
解决方案,因为在列表中由 space
连接的值在这里 'admission kits'
,为避免它使用 Series.str.extract
:
pat = r"\b({})\b".format("|".join(x for x in a))
df['output'] = df['des'].str.extract(pat).fillna('not match')
print (df)
sr.no des output
0 1 2 bed rooms bed
1 2 natural language processing not match
2 3 2x2 sheets grabs sheets
3 4 2 meter long pillow pillow
4 5 2x30mm long not match
a = ['bed', 'mattress', 'sheets', 'pillow', 'admission kits']
df = pd.DataFrame({'sr.no':[1,2,3,4,5], 'des': ['2 bed rooms', 'natural language processing', '2x2 sheets grabs', '2 meter long pillow', '2x30mm long']})
df = sr.no des
1 2 bed rooms
2 natural language processing
3 2x2 sheets grabs
4 2 meter long pillow
5 2x30mm long
这是列表 'a' 和数据框 'df'。所以在这里我想将列表 'a' 中的元素与数据框列 'des' 匹配。如果 'a' 单词列表出现在 'des' 列中,则打印匹配的单词,否则打印不匹配。
这是我想要的输出:
out= sr.no des output
1 2 bed rooms bed
2 natural language processing not match
3 2x2 sheets grabs sheets
4 2 meter long pillow pillow
5 2x30mm long not match
如何使用 python 执行此操作?
如果我们只想看是否匹配,可以使用str.contains
进行校验,np.where
进行赋值:
df['output'] = np.where(df['des'].str.contains('|'.join(a)), 'match', 'not match')
输出:
sr.no des output
0 1 2 bed rooms match
1 2 natural language processing not match
2 3 2x2 sheets grabs match
3 4 2 meter long pillow match
4 5 2x30mm long not match
不要使用 split
解决方案,因为在列表中由 space
连接的值在这里 'admission kits'
,为避免它使用 Series.str.extract
:
pat = r"\b({})\b".format("|".join(x for x in a))
df['output'] = df['des'].str.extract(pat).fillna('not match')
print (df)
sr.no des output
0 1 2 bed rooms bed
1 2 natural language processing not match
2 3 2x2 sheets grabs sheets
3 4 2 meter long pillow pillow
4 5 2x30mm long not match