在Python中选择上周的数据

时间:2015-06-22 16:15:54

标签: python datetime pandas format dataframe

我有一个大型数据库,我希望只阅读上周我的python代码。

我的第一个问题是收到日期和时间的列不是pandas中datetime的格式。我的输入(第15列)如下所示:

recvd_dttm
1/1/2015 5:18:32 AM
1/1/2015 6:48:23 AM
1/1/2015 13:49:12 PM

从pandas库中的时间序列/日期功能开始,我将基于"周()"功能如下例所示:

In [87]: d
Out[87]: datetime.datetime(2008, 8, 18, 9, 0)

In [88]: d - Week()
Out[88]: Timestamp('2008-08-11 09:00:00')

我试过这样订购日期:

df =pd.read_csv('MYDATA.csv')
orderdate = datetime.datetime.strptime(df['recvd_dttm'], '%m/%d/%Y').strftime('%Y %m %d')

然而我收到此错误

TypeError: must be string, not Series

有没有人知道更简单的方法,或者如何解决此错误?

编辑:日期不一定按顺序排列。并且有时在数据库中存在错误的错误,例如2015年9月9日(将来)有人输入错误的日期。我需要能够忽略这些。

2 个答案:

答案 0 :(得分:1)

import datetime as dt

# convert strings to datetimes
df['recvd_dttm'] = pd.to_datetime(df['recvd_dttm'])

# get first and last datetime for final week of data
range_max = df['recvd_dttm'].max()
range_min = range_max - dt.timedelta(days=7)

# take slice with final week of data
sliced_df = df[(df['recvd_dttm'] >= range_min) & 
               (df['recvd_dttm'] <= range_max)]

答案 1 :(得分:0)

您可以通过制作列表理解来迭代日期以进行转换

orderdate = [datetime.datetime.strptime(ttm, '%m/%d/%Y').strftime('%Y %m %d') for ttm in list(df['recvd_dttm'])]