我有以下 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/

10-16 17:35