2015-10-29 129 views
2

假设我有以下pandas.Series pandas.Series的字符串:查找使用IN操作

import pandas as pd 
s = pd.Series([1,3,5,True,6,8,'findme', False]) 

我可以使用in运营商找到任何整数或布尔值。例如,所有的产量真如下:

1 in s 
True in s 

然而,失败的时候我做的:

'findme' in s 

我的解决方法是使用pandas.Series.str或第一系列转换到一个列表,然后使用in运营商:

True in s.str.contains('findme') 
s2 = s.tolist() 
'findme' in s2 

任何想法,为什么我不能直接使用in运营商找到了一系列的字符串?

回答

3

任何想法为什么我不能直接使用in运算符来查找串中的字符串?

想到一个系列的更像是一个有序字典比在一个系列的成员列表中 - 测试是指数(像字典键),而不是价值观。你可以通过访问.values属性下的值:

>>> s = pd.Series([1,3,5,True,6,8,'findme', False]) 
>>> 7 in s 
True 
>>> 7 in s.values 
False 
>>> 'findme' in s 
False 
>>> 'findme' in s.values 
True 
+0

有趣的是,如果我'进口numpy的作为np'然后执行'S = pd.Series([1,3,5,真实,6,8, 'findme',False,np.nan])',我无法通过在s.values中执行'np.nan'来找到'NaN',但是我可以通过在s.tolist()中执行'np.nan' '。思考? – sedeh

+0

@sedeh:'nan'因为'nan!= nan'是一个奇怪的,所以一般来说,如果它是IDENTICAL,并且'tolist()'重用'np.nan',那么只能得到'(something_which_contains_nan)'。看到[这里](http://stackoverflow.com/questions/20320022/why-in-numpy-nan-nan-is-false-while-nan-in-nan-is-true)为我以前的答案南非的东西。 – DSM