2014-02-14 102 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]

这不应该总是工作吗?