2015-04-05 55 views
0

我想搜索一個特定的日期是否存在於一個熊貓數據框中,但是,我發現了一些特殊的日期行爲,如下所示。我對Python和熊貓是新手 - 所以任何幫助表示讚賞。在熊貓數據框內搜索日期

樣品數據框:

>>> hd.dtypes 
    Date datetime64[ns] 
    NAV   float64 
    dtype: object 

>>> hd.head() 
    Date   NAV 
    2004-04-01  41.106 
    2004-04-02  41.439 
    2004-04-05  41.727 
    2004-04-06  41.667 
    2004-04-07  41.770 

基本上我試圖找到一個特定日期「NEXT_DAY」存在於hd['Date']作爲below.The代碼總是返回not present這令我感到困惑。我試圖將next_day設置爲hd數據幀中的第一個日期,該數據幀應始終滿足 - 但它仍顯示not present。 然而代碼工作當我使用非datetime列:

>>> next_day = hd['Date'][0] 
>>> if (next_day not in hd['Date']): 
     print 'not present' 
    else: 
     print 'present' 
>>> not present 
>>>if (41.106 not in hd['NAV']): 
    print 'not present' 
    else: 
    print 'present' 
>>> present 

這是否與日期時間轉換?

回答

0

您不能使用這種方法來測試你可以使用isin

hd['Date'].isin([next_day])In [5]: 

df['Date'].isin([next_day]) 
Out[5]: 
0  True 
1 False 
2 False 
3 False 
4 False 
Name: Date, dtype: bool 

這裏的問題是,你試圖用一個數組來比較單一的值,所以你會得到意想不到的結果:

In [8]: 

next_day in df['Date'] 
Out[8]: 
False 
In [7]: 

next_day not in df['Date'] 
Out[7]: 
True 

我也無法重現你的另一說法:

In [17]: 

41.106 in df['NAV'] 
Out[17]: 
False 

因此,正確的方法是使用isin並傳遞一系列或列表以檢查傳入列表中的值是否存在於您的系列中,如上所示,無論您看到的結果是否爲虛假,並且與41.106 not in hd['NAV']不正確。

您可以使用與==操作沿any檢查成員:

In [18]: 

next_day == df['Date'] 
Out[18]: 
0  True 
1 False 
2 False 
3 False 
4 False 
Name: Date, dtype: bool 
In [19]: 

(next_day == df['Date']).any() 
Out[19]: 
True