python如何检查字符串是否是字符串列表的元素

con*_*001 3 python string list dataframe pandas

在python中,如何检查字符串是否是字符串列表的元素?

我正在使用的示例数据是:

testData=pd.DataFrame({'value':['abc','cde','fgh']})
Run Code Online (Sandbox Code Playgroud)

那么为什么以下代码的结果为"False":

testData['value'][0] in testData['value']
Run Code Online (Sandbox Code Playgroud)

EdC*_*ica 5

您可以使用vectorised str.contains来测试每行中是否存在字符串:

In [262]:
testData['value'].str.contains(testData['value'][0])

Out[262]:
0     True
1    False
2    False
Name: value, dtype: bool
Run Code Online (Sandbox Code Playgroud)

如果你想知道它是否存在于任何一行,那么使用any:

In [264]:
testData['value'].str.contains(testData['value'][0]).any()

Out[264]:
True
Run Code Online (Sandbox Code Playgroud)

好的,以解决您的上一个问题:

In [270]:
testData['value'][0] in testData['value']

Out[270]:
False
Run Code Online (Sandbox Code Playgroud)

这是因为pd.Series.__contains__实施:

def __contains__(self, key):
    """True if the key is in the info axis"""
    return key in self._info_axis
Run Code Online (Sandbox Code Playgroud)

如果我们看看_info_axis实际是什么:

In [269]:
testData['value']._info_axis

Out[269]:
RangeIndex(start=0, stop=3, step=1)
Run Code Online (Sandbox Code Playgroud)

然后,我们可以看到,当我们做'abc'testData['value']我们真正测试是否'abc'实际上是在指数这就是为什么它返回False

例:

In [271]:
testData=pd.DataFrame({'value':['abc','cde','fgh']}, index=[0, 'turkey',2])
testData

Out[271]:
       value
0        abc
turkey   cde
2        fgh

In [272]:
'turkey' in testData['value']

Out[272]:
True
Run Code Online (Sandbox Code Playgroud)

我们现在可以看到返回,True因为我们正在测试索引中是否存在"turkey"