确定Pandas列/行中是否存在列表中的至少一个子字符串

kqlmhetl  于 2023-02-27  发布在  其他
关注(0)|答案(1)|浏览(91)

我有一个包含几个子字符串的列表,需要用它来识别列中至少包含一个子字符串的行。我有代码可以正确识别是否出现了一个字符串,但我无法让它识别列表。

df.Col1.str.contains('text')

正确地返回一个序列。然而,我真正想要的是使用列表来标识许多选项中的一个,并在包含任何选项时返回True。

list1 = ['text','Text','third',fourth']
for item in list1:
    df.Col1.str.contains(item)

返回四个序列,这对我的使用不好。
我也试过:

for item in list:
    if df.Col1.str.contains(item) == True:
        df['Check'] = 'True'

但它返回'Series的真值不明确'。
我需要做什么修改才能让它在列表而不是单个字符串上工作?
如果列表中有一个选项,则新数据框列的最终结果将是值“True”;如果字符串不包含任何列表选项,则结果为“Nothing”。

yv5phkfx

yv5phkfx1#

首先,要回答您的问题,您可以使用以下方法(),为Pandas系列获取一个布尔值。它等同于逻辑"or",也就是说,如果系列中的任何一个值为真,则为真,否则为假。第二,不应该使用"list"作为变量名,因为它是一个需要重写的python内置函数,这是不好的做法。第三,我不知道你想用这句台词来达到什么目的

df['Check'] = 'True'

因为你在每一行的"Check"列中写上"True"来表示每次if条件为真,但是我假设这就是你想要的。

if x == True:
     ...

您可以使用

if x:
    ...

因此,您的代码应该如下所示:

list1 = ['text','Text','third','fourth']

for item in list1:
    if df.id.str.contains(item).any() == True:
        df['Check'] = 'True'

相关问题