检查字符串是否在熊猫数据框中

我希望看到一个特定的字符串是否存在于我的数据框架中的一个特定列中。

我听错了

ValueError: The truth value of a Series is ambiguous. Use 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")
321101 次浏览

你应该使用 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

a['Names'].str.contains('Mel') will return an indicator vector of boolean values of size 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

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

熊猫似乎建议 df.to_numpy since的其他方法仍然提高 FutureWarning: https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.to_numpy.html#pandas.DataFrame.to_numpy

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

b=a['Names']
c = b.to_numpy().tolist()
if 'Mel' in c:
print("Mel is in the dataframe column Names")

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

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

如果你想保存结果,你可以使用以下方法:

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


(data_frame.col_name=='str_name_to_check').sum()
import re
s = 'string'


df['Name'] = df['Name'].str.findall(s, flags = re.IGNORECASE)


#or
df['Name'] = df[df['Name'].isin(['string1', 'string2'])]