我想看看我的数据帧中的特定列中是否存在特定字符串。
我收到了错误
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"
答案 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 since
:https://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")