我有一个大型数据库,我希望只阅读上周我的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日(将来)有人输入错误的日期。我需要能够忽略这些。
答案 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'])]