通过将列表中的部分字符串匹配到数据框列来过滤行

时间:2019-06-17 18:31:20

标签: python pandas dataframe

我有一个带有“说明”列的数据框(df)。我想通过从列表(mylist)中识别部分匹配项来从此数据框中提取所有这些行。

df
------------------
id   description
 111    abcxyz
 212    ab10yz
 203    abcdd9
 442    ab00-z
 554    a12x0z
 697    a9901z


mylist: ['ab','yz']

有类似的问题,但主要集中在将列表项与数据框列完全匹配。

我有兴趣将mylist中的项目与数据框的描述列进行匹配,并将这些行作为找到匹配项的数据框返回。

作为数据框的预期结果:

------------------
id   description
111    abcxyz
212    ab10yz
203    abcdd9
442    ab00-z

我尝试了不同的解决方案。在这里,我将提到其中的两个,如下:

df[df.description.str.contains('|'.join(mylist))]

df[df['description'].str.contains(mylist)]

上面的第一行导致:

   KeyError: '[nan nan nan ... nan nan nan] not in index'

第二行代码将导致:

   TypeError: unhashable type: 'list'

1 个答案:

答案 0 :(得分:0)

您可以使用正则表达式,“ DataFrame.str.contains”已经可以做到:

pt = '.*?({}).*?'.format('|'.join(mlist))
df[df['description'].str.contains(pt, regex= True)]