python将时间变量分为日期和时间

时间:2016-04-24 18:17:17

标签: python

我的数据框包含像

这样的col
df['time']

2012-11-28 07:01:05

2012-11-28 07:01:05

2012-11-28 07:03:45

2012-11-28 07:06:02

2012-11-28 07:10:05

2012-11-28 07:12:04

2012-11-28 07:13:01

我想将其拆分为两个日期时间 col

日期(2012-11-28)和时间(07:13:01)

所以我确实喜欢这样:

df['date']=df['time'].map(lambda x: dt.datetime(x.year,x.month,x.day)) - 工作正常!

但是当我输入

df['date']=df['time'].map(lambda x: dt.datetime(x.hour,x.minute,x.second))

我收到了错误 - ValueError: day is out of range for month

我不知道该怎么做

2 个答案:

答案 0 :(得分:0)

错误是因为对于第二个map函数调用,您正在使用hour,min,sec参数创建datetime个对象。但是,前三个参数应该是年,月,日。所以,而不是月份,它得到的分钟值大于12。

假设您的df['time']datetime个对象,您希望执行以下操作:

dates = map(lambda x: x.date(), df['time']) # get all dates
times = map(lambda x: x.time(), df['time']) # get all times

获取字符串表示:

dates = map(lambda x: str(x.date()), df['time']) # get all dates
times = map(lambda x: str(x.time()), df['time']) # get all times

答案 1 :(得分:0)

import datetime

base = datetime.datetime(2012, 11, 28, 7,1,5)
date_list = [base - datetime.timedelta(minutes=x) for x in range(0, 7)]
dates = [ dt.date() for dt in date_list]
times = [ dt.time() for dt in date_list]
for _date, _time in zip(dates, times):
    print('date=', _date, 'time=', _time)

date= 2012-11-28 time= 07:01:05
date= 2012-11-28 time= 07:00:05
date= 2012-11-28 time= 06:59:05
date= 2012-11-28 time= 06:58:05
date= 2012-11-28 time= 06:57:05
date= 2012-11-28 time= 06:56:05
date= 2012-11-28 time= 06:55:05