我正在尝试筛选列中某个日期的数据框。 colum条目是时间戳,我尝试从这些构造一个布尔向量, 检查某个日期。 我想:筛选数据框
filterfr = df[((df.expiration.month==6) & (df.expiration.day==22) & (df.expiration.year==2002)]
它不工作,因为“系列”对象有没有属性“月”。 这怎么办?
我正在尝试筛选列中某个日期的数据框。 colum条目是时间戳,我尝试从这些构造一个布尔向量, 检查某个日期。 我想:筛选数据框
filterfr = df[((df.expiration.month==6) & (df.expiration.day==22) & (df.expiration.year==2002)]
它不工作,因为“系列”对象有没有属性“月”。 这怎么办?
当你做df.expiration
时,你得到一个Series
其中的项目是到期日期时间。
尝试比较实际datetime.datetime
对象:
filterfr = df[df['expiration'] == datetime.datetime(2002, 6, 22)]
你可能要考虑使用DatetimeIndex
,根据您的数据集。这可让您使用便捷的语法
df['2002-06-22']
要访问,你必须把它包在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 ...
这 filterfr = DF [DF [ '到期'] == datetime.datetime(2002,6,22)] 工作得很好。
然而,做一些过滤后,我试图做filterfr.expiration [0] 或filterfr [“过期”] [0] 获得该系列中的第一个元素时,得到一个错误, 。 KeyError:0L被提出,尽管系列中有元素。 该系列看起来像这样: 名称:过期,长度:534668,dtype:datetime64 [ns]
这不应该总是工作吗?
这只会在一天的开始时起作用(对于其他时间戳不会有±) –