如何检查Pandas行是否包含列表的完整字符串或子字符串?

时间:2018-11-15 19:55:53

标签: python-3.x pandas numpy conditional-statements

我有一个字符串列表

list_ = ['abc', 'def', 'xyz']

我有一个带有列df的{​​{1}},我想检查CheckCol中的值是否包含列表元素的整个子串中的任何一个。

如果这样做,我想将原始值提取到新列CheckCol中。

NewCol

进入

CheckCol
'a'
'ab'
'abc'
'abc-de'

但是,我的以下代码只能识别确切的完整字符串,而不能识别我想要的子字符串。

# What I want
CheckCol        NewCol
'a'
'ab'
'abc'           'abc'
'abc-de'       'abc-de'

给出

df['NewCol'] = np.where(df['CheckCol'].isin(list_), df['CheckCol'], '')

编辑:将# What I get CheckCol NewCol 'a' 'ab' 'abc' 'abc' 'abc-de' 更改为list

1 个答案:

答案 0 :(得分:3)

我认为实现“最简单”的解决方案是使用正则表达式。在正则表达式中,管道|表示or。通过执行'|'.join(yourlist),我们可以获得要检查的子字符串。

import pandas as pd
import numpy as np

list_ = ['abc', 'def', 'xyz']

df = pd.DataFrame({
    'CheckCol': ['a','ab','abc','abd-def']
})

df['NewCol'] = np.where(df['CheckCol'].str.contains('|'.join(list_)), df['CheckCol'], '')

print(df)

#  CheckCol   NewCol
#0        a         
#1       ab         
#2      abc      abc
#3  abd-def  abd-def

注意:您的变量名list已更改为list_。尝试避免使用保留的Python名称空间。