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

时间:2015-06-19 18:04:05

标签: python python-2.7 pandas

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

我收到了错误

  

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

import pandas as pd

BabyDataSet = [('Bob', 968), ('Jessica', 155), ('Mary', 77), ('John', 578), ('Mel', 973)]

a = pd.DataFrame(data=BabyDataSet, columns=['Names', 'Births'])

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

9 个答案:

答案 0 :(得分:48)

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")

答案 1 :(得分:19)

您应该使用any()

In [98]: a['Names'].str.contains('Mel').any()
Out[98]: True

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

a['Names'].str.contains('Mel')为您提供一系列bool值

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

答案 2 :(得分:2)

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

    a['Names'].str.contains('') 

将不起作用,因为它将始终返回True。

相反,使用

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

准确反映一个字符串是否在系列中,包括搜索空字符串的极端情况。

答案 3 :(得分:1)

看来,OP的意思是要找出字符串'Mel' 是否存在于特定列中,而不是包含列中,因此使用包含是不必要的,并且效率不高。一个简单的equals-to就足够了:

(a['Names']=='Mel').any()

答案 4 :(得分:1)

我碰到过同样的问题,

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

但是此解决方案可能会比较慢,因为内部大熊猫会从系列中创建列表。

答案 5 :(得分:0)

熊猫似乎建议使用 <button onclick="y=document.getElementById('all');y.load();y.play();" type="button" >START></button> ,其他方法仍会引发df.to_numpy sincehttps://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.to_numpy.html#pandas.DataFrame.to_numpy

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

FutureWarning

答案 6 :(得分:0)

用于不区分大小写的搜索。

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

答案 7 :(得分:0)

如果你想保存结果,那么你可以使用这个:

a['result'] = a['Names'].apply(lambda x : ','.join([item for item in str(x).split() if item.lower() in ['mel', 'etc']]))

答案 8 :(得分:-1)

您应该检查代码行的值,例如添加检查代码的长度。

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