【问题标题】:python how to check if a string is an element of a list of strings [duplicate]python如何检查字符串是否是字符串列表的元素[重复]
【发布时间】:2017-03-11 10:51:15
【问题描述】:

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

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

testData=pd.DataFrame({'value':['abc','cde','fgh']})

那为什么下面代码的结果是“False”:

testData['value'][0] in testData['value']

【问题讨论】:

  • 抱歉,数据将存储为包含示例 df 中单个字符串的系列,但您的真实 df 数据真的是每行的字符串列表吗?因为那是根本不同的
  • @EdChum 的回答很好。为了帮助修复您的原始错误,您只需检查 testData['value'] 的值,因此您的最后一行将是 'testData['value'][0] in testData['value'].values' 并且您将得到一个真
  • @EdChum,我想示例数据更准确地描述了我的问题。你提到的根本区别可能是我忽略的。
  • 实际上 testData['value'][0] in testData['value'] 我无法解释,不知何故,当标量值为 lhs 时,它能够以某种方式将 Series 数组评估为一个奇怪的标量布尔值
  • 我找到了你上一个问题的答案

标签: python string list pandas dataframe


【解决方案1】:

您可以使用矢量化的str.contains 来测试每行中是否存在/包含字符串:

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

Out[262]:
0     True
1    False
2    False
Name: value, dtype: bool

如果您想知道它是否出现在任何行中,请使用any

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

Out[264]:
True

可以回答您的最后一个问题:

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

Out[270]:
False

这是因为实现了pd.Series.__contains__

def __contains__(self, key):
    """True if the key is in the info axis"""
    return key in self._info_axis

如果我们看一下 _info_axis 的实际含义:

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

Out[269]:
RangeIndex(start=0, stop=3, step=1)

然后我们可以看到当我们在testData['value'] 中执行'abc' 时,我们真的在测试'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

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

【讨论】:

    猜你喜欢
    • 2010-10-04
    • 2021-05-22
    • 2017-11-20
    • 2014-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-18
    相关资源
    最近更新 更多