我试图过滤列中特定日期的数据帧。 colum条目是时间戳,我尝试从那些构造一个布尔向量, 检查某个日期。 我试过了:
filterfr = df[((df.expiration.month==6) & (df.expiration.day==22) & (df.expiration.year==2002)]
它不起作用,因为'系列'对象没有属性' month'。 如何才能做到这一点?
答案 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]
这不应该一直有效吗?