我的数据框包含像
这样的coldf['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
我不知道该怎么做
答案 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