过滤数据框

时间:2014-02-14 00:02:22

标签: python-2.7 pandas

我试图过滤列中特定日期的数据帧。 colum条目是时间戳,我尝试从那些构造一个布尔向量, 检查某个日期。 我试过了:

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

它不起作用,因为'系列'对象没有属性' month'。 如何才能做到这一点?

3 个答案:

答案 0 :(得分:3)

执行df.expiration后,您将返回Series,其中的项目是到期日期。

尝试与实际的datetime.datetime对象进行比较:

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

您可能希望使用DatetimeIndex,具体取决于您的数据集。这使您可以使用方便的语法

df['2002-06-22']

答案 1 :(得分:3)

要访问DatetimeIndex方法,必须将其包装在DatetimeIndex(当前为*)中。

最快的方法是访问日,月和年属性(就像您尝试的那样):

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

替代方法,但较慢的方法是使用normalize方法(将其带到当天的开始),或者使用date属性:

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 ...

答案 2 :(得分:0)

此 filterfr = df [df ['expiration'] == datetime.datetime(2002,6,22)] 工作得很好。

然而,在做了一些过滤之后,我收到了一个错误, 当试图做filterfr.expiration [0] 或者filterfr ['expiration'] [0] 获得系列中的第一个元素。 KeyError:引发0L,尽管系列中有元素。 该系列看起来像这样: 名称:到期,长度:534668,dtype:datetime64 [ns]

这不应该一直有效吗?