已知一个datetime,筛选其前七天的数据

it2024-04-12  45

问题

一开始想的很简单,直接用timedelta求7天的时间差,然后原始数据减去时间差,然后只需大于data_pre_seven,小于a即可,如下:

a = pd.to_datetime('20120701 11:22:33') sevenday = datetime.timedelta(days=7) date_pre_seven = a - sevenday pre_seven_day = id_data[(id_data['日期时间'] > date_pre_seven) & (id_data['日期时间'] < a)

但是后来发现,这求出来的好像不是我想要的,按上述方法求取的是20120624 11:22:33到20120701 11:22:33的数据,而我想要的是20120624 00:00:00到20120630 00:00:00的数据.

后来就想能不能把datetime的日期保留,但是时间也就是时分秒变为0,这样不就是想要的了嘛.于是去找了下datatime怎么转换成date,然后在加上时分秒皆为0的数据.

转自:https://www.cnblogs.com/lvxiuquan/archive/2012/07/19/2599174.html

1.date转为datetime类型,使用datetime的combine():

>>> from datetime import datetime,date,time >>> d = date(2011,7,14) >>> dt = datetime.combine(d,time()) >>> dt #datetime.datetime(2011, 7, 14, 0, 0)

2. datetime转为date类型,使用datetime的date():

>>> d1 = dt.date() >>> d1 #datetime.date(2011, 7, 14)

解决方法

a = pd.to_datetime('20120701 11:22:33') sevenday = datetime.timedelta(days=7) date_pre_seven = a - sevenday date_pre_seven_begin = datetime.datetime.combine(date_pre_seven.date(),datetime.time()) # datetime.datetime(2012, 6, 24, 0, 0) date_pre_seven_end = datetime.datetime.combine(a.date(),datetime.time()) # datetime.datetime(2012, 7, 1, 0, 0) pre_seven_day = id_data[(id_data['日期时间'] > date_pre_seven_begin ) & (id_data['日期时间'] < date_pre_seven_end )

 

最新回复(0)