我有以下 list :
search_list = ['STEEL','IRON','GOLD','SILVER']
我需要在数据框(df)中进行搜索:
a b
0 123 'Blah Blah Steel'
1 456 'Blah Blah Blah'
2 789 'Blah Blah Gold'
并将匹配的行插入新的数据帧(newdf),并从列表中添加带有匹配词的新列:
a b c
0 123 'Blah Blah Steel' 'STEEL'
1 789 'Blah Blah Gold' 'GOLD'
我可以使用以下代码提取匹配的行:
newdf=df[df['b'].str.upper().str.contains('|'.join(search_list),na=False)]
但我不知道如何将列表中的匹配词添加到c列中。
我在想匹配必须以某种方式捕获列表中匹配单词的索引,然后使用索引号提取值,但是我不知道该怎么做。
任何帮助或指针将不胜感激
谢谢
最佳答案
您可以使用 extract 并过滤掉那些 nan
(即不匹配):
search_list = ['STEEL','IRON','GOLD','SILVER']
df['c'] = df.b.str.extract('({0})'.format('|'.join(search_list)), flags=re.IGNORECASE)
result = df[~pd.isna(df.c)]
print(result)
输出
a b c
123 'Blah Blah Steel' Steel
789 'Blah Blah Gold' Gold
请注意,您必须导入 re 模块才能使用
re.IGNORECASE
标志。作为替代方案,您可以直接使用 2
,即 re.IGNORECASE
标志的值。更新
正如@user3483203 所提到的,您可以使用以下方法保存导入:
df['c'] = df.b.str.extract('(?i)({0})'.format('|'.join(search_list)))
关于Python - 从列表中搜索数据框中的字符串,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55028465/