2016-12-05 64 views
0

假設我想知道一個數字是否在我的pd.Dataframe列中。df.column中XXX的含義是什麼

我會怎麼做:

999 in test.ind 
Out[29]: 
True 

然而,這是奇怪的,因爲

test.ind.max() 
Out[28]: 
932 

而事實上,

(999 == test.ind).sum() 
Out[30]: 
0 

列是dtype('int64')類型。現在,顯然​​表達式沒有按照我的預期工作。但是,這是否還有其他一些要點?

xx in pd.Series評估什麼?

回答

4

它的評估999是否在你的系列指數,__contains__ operator這是當你調用in試驗該指數值叫什麼,而不是值是否在值,可以使用isin==

In [6]: 
s = pd.Series(np.arange(5), index=list('abcde')) 
s 

Out[6]: 
a 0 
b 1 
c 2 
d 3 
e 4 
dtype: int32 

In [7]: 
'c' in s 

Out[7]: 
True 

In [8]: 
s.isin([2]) 

Out[8]: 
a False 
b False 
c  True 
d False 
e False 
dtype: bool 

它的實現,像這樣:

def __contains__(self, item): 
    return item in self.items 

見:https://github.com/pandas-dev/pandas/blob/master/pandas/core/internals.py#L3358

docs

感謝@chrisb

+1

看到這裏還文檔 - http://pandas.pydata.org/pandas-docs/stable/dsintro.html#series-is-dict-like – chrisb

+0

@ chrisb謝謝,已經更新了我的答案 – EdChum