2017-01-22 32 views
-2

我有一個數據集,如下所示。在python中對日期時間類型進行分類

Sign-uptime            Part of Day 
----------------------------------------------------------------------------------- 
2015-02-03 13:48:41 
2015-02-06 19:42:33 
2015-02-07 08:22:11 
2015-02-11 02:23:11 
2015-02-14 22:45:41 

我已經導出的數據集,我需要歸類如下:

Morning  5 am to 12 pm (noon) 
Afternoon 12 pm to 5 pm 
Evening  5 pm to 9 pm 
Night  9 pm to 5 am 

,並在列中顯示這些「節的一部分。」註冊時間是日期時間類型。

+0

請告訴我們你已經嘗試了什麼... – franklinsijo

+0

我只提取小時(例如12.0)從日期時間,並將其轉換爲int(列名:Hours.Int)。於是,我嘗試 如果merged_data [ 'Hours.Int']所有()在範圍(1,5): 打印( '夜') ELIF等... –

+0

我想這也 merged_data ['Part_of_Day'] = numpy.where(int(12)<= merged_data ['Hours.Int']。all()<= int(17),「Afternoon」,0) –

回答

0

請參閱下面的我最好的soloution。 Theres遇到一些時間跨越一天的困難...所以我用一個工作周圍將'夜'範圍分成2個獨立的範圍(AM,PM)。請看下圖:

from datetime import datetime, time 

time_cats = { 
'morning':(time(05,0,0), time(11,59,59)), 'afternoon':(time(12,0,0), time(16,59,59)), 
'evening':(time(17,0,0), time(20,59,59)), 'night (PM)':(time(21,0,0), time(23,59,59)), 
'night (AM)':(time(0,0,0), time(04,59,59)) 
} 

times_to_check = [ 
'2015-02-03 13:48:41', 
'2015-02-06 19:42:33', 
'2015-02-07 08:22:11', 
'2015-02-11 02:23:11', 
'2015-02-14 22:45:41' 
] 

for check in times_to_check: 
    check_time = datetime.strptime(check, "%Y-%m-%d %H:%M:%S").time() 
    for k, v in time_cats.iteritems(): 
     if v[0] <= check_time <= v[1]: 
      print check, k 
+0

應該可能已經將此功能應用於函數考慮時間表和'time_cats'字典! –

+0

謝謝。我試了下面,它的工作原理。 merged_data.loc [merged_data [ 'Hours_Int']。ISIN(範圍(1,5)), 'Part_of_Day'] = '3' #Night merged_data.loc [merged_data [ 'Hours_Int']。ISIN(範圍(5 ,12)), 'Part_of_Day'] = '0' #Morning merged_data.loc [merged_data [ 'Hours_Int']。ISIN(範圍(12,17)), 'Part_of_Day'] = '1' #Afternoon merged_data。 LOC [merged_data [ 'Hours_Int']。ISIN(範圍(17,21)), 'Part_of_Day'] = '2' #Evening merged_data.loc [merged_data [ 'Hours_Int']。ISIN(範圍(21,25)) ,'Part_of_Day'] ='3'#Night –

+0

我回答了你的問題嗎?考慮upvote? –

相關問題