在熊猫系列中搜索不起作用

时间:2014-08-28 09:13:34

标签: python pandas

我有一个数据框,其中一列是字符串类型的“名称”。 我试图找出该列中是否出现名称。

发生这种情况:

In  [1]: print specific_name in df['name']
Out [1]: False
In  [2]: print specific_name in df['name'].tolist()
Out [2]: True

为什么我必须把它变成一个列表?

2 个答案:

答案 0 :(得分:3)

你正在做的是一个含糊不清的电话,因为你没有在什么条件下指定它应该评估为True

要过滤掉与您的字符串匹配的行,请执行以下操作:

df[df['name'] == specific_name]

df[df['name'].isin([specific_name])]

注意我必须将你的字符串放入一个列表,因为它必须是一个可迭代的对象

如果我们尝试你的尝试:

In [122]:

'hello' in df['name']
Out[122]:
False

这是因为它含糊不清。

In [119]:

df[df['name']=='hello']
Out[119]:
    name
0  hello
In [121]:

df[df['name'].isin(['hello'])]
Out[121]:
    name
0  hello

要对列表进行匹配,请使用isin

In [123]:

df = pd.DataFrame({'name':['hello','world','python']})
df
Out[123]:
     name
0   hello
1   world
2  python

In [126]:

specifc_names = ['hello', 'world']
df[df['name'].isin(specifc_names)]
Out[126]:
    name
0  hello
1  world

我们也可以使用多个布尔条件但是记得使用数组运算符,并且由于运算符优先级需要在条件周围加上大括号:

In [127]:

df[(df['name'] == 'hello') | (df['name']=='world')]
Out[127]:
    name
0  hello
1  world

答案 1 :(得分:0)

您可以使用:(df.name == 'Name').sum() > 0

如果名称“名称”在列中,它将返回True。