我有一个数据框,其中一列是字符串类型的“名称”。 我试图找出该列中是否出现名称。
发生这种情况:
In [1]: print specific_name in df['name']
Out [1]: False
In [2]: print specific_name in df['name'].tolist()
Out [2]: True
为什么我必须把它变成一个列表?
答案 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。