Python 检查字符串是否在数据帧中
我想看看我的数据框中的特定列中是否存在特定的字符串 我发现了错误 ValueError:序列的真值不明确。使用a.empty, a、 bool()、a.item()、a.any()或a.all() 您应该使用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
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()