2015-10-29 42 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