2014-02-14 103 views
2

我正在嘗試篩選列中某個日期的數據框。 colum條目是時間戳,我嘗試從這些構造一個布爾向量, 檢查某個日期。 我想:篩選數據框

filterfr = df[((df.expiration.month==6) & (df.expiration.day==22) & (df.expiration.year==2002)] 

它不工作,因爲「系列」對象有沒有屬性「月」。 這怎麼辦?

回答

2

當你做df.expiration時,你得到一個Series其中的項目是到期日期時間。

嘗試比較實際datetime.datetime對象:

filterfr = df[df['expiration'] == datetime.datetime(2002, 6, 22)] 

你可能要考慮使用DatetimeIndex,根據您的數據集。這可讓您使用便捷的語法

df['2002-06-22'] 
+0

這隻會在一天的開始時起作用(對於其他時間戳不會有±) –

2

要訪問,你必須把它包在DatetimeIndex(目前*)的DatetimeIndex方法。

的最快方法是訪問日,月和年屬性(就像你未遂):

expir = pd.DatetimeIndex(df['expiration']) 
(expir.day == 22) & (expir.month == 6) & (expir.year == 2002) 

替代,但方法是使用標準化的方法(將其帶到了當天的啓動),或使用日期屬性:

pd.DatetimeIndex(df['expiration']).normalize() == datetime.datetime(2002, 06, 22) 

pd.DatetimeIndex(df['expiration']).date == datetime.datetime(2002, 06, 22) 

*在0.15會有一個dt的屬性,這樣您就可以訪問這些爲:

expir = df['expiration'] 
expir.dt.day ... 
0

這 filterfr = DF [DF [ '到期'] == datetime.datetime(2002,6,22)] 工作得很好。

然而,做一些過濾後,我試圖做filterfr.expiration [0] 或filterfr [「過期」] [0] 獲得該系列中的第一個元素時,得到一個錯誤, 。 KeyError:0L被提出,儘管系列中有元素。 該系列看起來像這樣: 名稱:過期,長度:534668,dtype:datetime64 [ns]

這不應該總是工作嗎?