2016-04-24 98 views
1

我有一個包含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)和時間(7時13分01秒)

所以我不喜歡的是,謝勝利:

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

但是當我鍵入

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

我錯誤 - ValueError: day is out of range for month

我不知道該怎麼辦

+0

在DF [ '時間']是每個條目的日期時間對象? – trans1st0r

回答

0

這個錯誤是因爲第二map函數調用,您創建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 
+0

謝謝你的回覆, 但比tipe是時間而不是日期時間 所以你不能做時間計算例如 df.ix [1.'date'] - df.ix [2.'date']我想要做的事情 – maori

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