【发布时间】:2017-08-08 06:51:56
【问题描述】:
我有一个像下面这样的df
col1, mydate
1, 25-DEC-2016 09:15:00
2, 25-DEC-2016 10:14:00
3, 25-DEC-2016 10:16:00
4, 25-DEC-2016 10:18:56
2, 25-DEC-2016 11:14:00
2, 25-DEC-2016 10:16:00
df.info(): mydate 323809 non-null object
我需要根据时间来这个数据框,比如df的时间小于10:15:00,df的时间小于11:15:00
所以使用
创建了我的切片间隔times=[pd.to_datetime(i) for i in '10:15:00','11:15:00','12:15:00','13:15:00','14:15:00','15:15:00', '15:30:00']
然后我将 mydate 类型转换为时间 这需要很多时间
df['mydate']=df4.mydate.apply(lambda x: pd.to_datetime(x,infer_datetime_format=True).time())
上述命令我认为可以优化,或者应该有更好/更快的方式。
那我就干吧
for time in times:
slice = df[df.mydate<time.time()]
我的意图只是将 df.mydate 时间与 ['10:15:00','11:15:00','12:15:00','13:15:00','14:15:00','15:15:00', '15:30:00'] (但不是日期) 进行比较,并简单地将 df 子集
上述方法对我来说很好,但我正在寻找更好的方法。
补充: 有趣的是,使用
对 mydate 进行排序非常快(即使我没有将 mydate col 转换为 datetime)df.sort_values(by='mydate')
这让我认为我的子集化方式应该更快。
mydate col 将始终为 25-DEC-2016 09:15:00 格式(注意 DEC 不是 Dec)我可以使用 format='%d-%b-%Y %H:%M:%S'
【问题讨论】:
-
为什么不直接使用 lambda 函数来获取时间子字符串,然后只使用字符串比较就可以了。我认为时间转换会花费时间。减少转化时间会很有帮助。