Python 检查字符串是否在数据帧中

Python 检查字符串是否在数据帧中,python,python-2.7,pandas,Python,Python 2.7,Pandas,我想看看我的数据框中的特定列中是否存在特定的字符串 我发现了错误 ValueError:序列的真值不明确。使用a.empty, a、 bool()、a.item()、a.any()或a.all() 您应该使用any() a['Names'].str.contains('Mel')提供一系列布尔值 In [100]: a['Names'].str.contains('Mel') Out[100]: 0 False 1 False 2 False 3 False 4

我想看看我的数据框中的特定列中是否存在特定的字符串

我发现了错误

ValueError:序列的真值不明确。使用a.empty, a、 bool()、a.item()、a.any()或a.all()

您应该使用
any()


a['Names'].str.contains('Mel')
提供一系列布尔值

In [100]: a['Names'].str.contains('Mel')
Out[100]:
0    False
1    False
2    False
3    False
4     True
Name: Names, dtype: bool

a['Names'].str.contains('Mel')
将返回大小为
len(BabyDataSet)

因此,您可以使用

mel_count=a['Names'].str.contains('Mel').sum()
if mel_count>0:
    print ("There are {m} Mels".format(m=mel_count))
或者
any()
,如果您不关心有多少条记录与您的查询匹配

if a['Names'].str.contains('Mel').any():
    print ("Mel is there")

您应该检查代码行的值,就像添加代码行的检查长度一样

if(len(a['Names'].str.contains('Mel'))>0):
    print("Name Present")

OP的意思是找出字符串“Mel”是否存在于特定列中,而不包含在列中的任何字符串中。因此,不需要使用contains,也没有效率

一个简单的等于就足够了:

df = pd.DataFrame({"names": ["Melvin", "Mel", "Me", "Mel", "A.Mel"]})

mel_count = (df['names'] == 'Mel').sum() 
print("There are {num} instances of 'Mel'. ".format(num=mel_count)) 
 
mel_exists = (df['names'] == 'Mel').any() 
print("'Mel' exists in the dataframe.".format(num=mel_exists)) 

mel_exists2 = 'Mel' in df['names'].values 
print("'Mel' is in the dataframe: " + str(mel_exists2)) 
印刷品:

There are 2 instances of 'Mel'. 
'Mel' exists in the dataframe.
'Mel' is in the dataframe: True

我遇到了同样的问题,我使用:

if "Mel" in a["Names"].values:
    print("Yep")

但是这个解决方案可能会比较慢,因为它会从一个系列中创建一个列表。

如果有可能需要搜索空字符串

    a['Names'].str.contains('') 
将不起作用,因为它将始终返回真值

相反,使用

    if '' in a["Names"].values

准确反映字符串是否在序列中,包括搜索空字符串的边缘情况

熊猫似乎向努比推荐
df,因为其他方法仍然会发出
未来警告

因此,在这种情况下可行的替代方案是:

b=a['Names']
c=b.to_numpy().tolist()
如果c中的“Mel”:
打印(“Mel位于数据框列名中”)

用于不区分大小写的搜索

a['Names'].str.lower().str.contains('mel').any()

如果
a['Names']
中存在NaN值,请使用
contains()
函数的
na
参数。第2个问题:
str.contains('Mel')
匹配dataframe列中每行的每个子字符串。所以
ABCMelABC
=
Mel
。一个类似的解决方案:(a['Names'].eq('Mel')).any()如果我想检查这两个单词中是否有一个存在,a['Names'].str.contains(“Mel | word|u 1 | word u 2”)可以工作。你能为“和”的情况提出一些建议吗。我想检查列表中的所有单词是否都存在于数据帧的每一行中
    if '' in a["Names"].values
a['Names'].str.lower().str.contains('mel').any()