2016-01-28 225 views
2

我有一個熊貓數據框,我希望子集的時間大於或小於12pm。首先,我將字符串datetime轉換爲pandas中的datetime [64] ns對象。按時間過濾熊貓數據幀

segments_data['time'] = pd.to_datetime((segments_data['time'])) 

然後我分開時間,日期,月份,年份& dayofweek像下面一樣。

import datetime as dt 

segments_data['date'] = segments_data.time.dt.date 
segments_data['year'] = segments_data.time.dt.year 
segments_data['month'] = segments_data.time.dt.month 
segments_data['dayofweek'] = segments_data.time.dt.dayofweek 
segments_data['time'] = segments_data.time.dt.time 

我的時間欄如下所示。

segments_data['time'] 
Out[1906]: 
    07:43:00 
    07:52:00 
    08:00:00 
    08:42:00 
    09:18:00 
    09:18:00 
    09:18:00 
    09:23:00 
    12:32:00 
    12:43:00 
    12:55:00 
    Name: time, dtype: object 

現在我想子集的數據幀的時間大於12pm和時間少於12pm。

segments_data.time[segments_data['time'] < 12:00:00] 

它不起作用,因爲timestring object

回答

3

發表列作爲原始日期時間,稱之爲ts

segments_data['ts'] = pd.to_datetime((segments_data['time'])) 

接下來,就可以把日期時間到H:M:S串並使用between(start,end)似乎工作:

In [227]: 
segments_data=pd.DataFrame(x,columns=['ts']) 
segments_data.ts = pd.to_datetime(segments_data.ts) 
segments_data 
Out[227]: 
ts 
0 2016-01-28 07:43:00 
1 2016-01-28 07:52:00 
2 2016-01-28 08:00:00 
3 2016-01-28 08:42:00 
4 2016-01-28 09:18:00 
5 2016-01-28 09:18:00 
6 2016-01-28 09:18:00 
7 2016-01-28 09:23:00 
8 2016-01-28 12:32:00 
9 2016-01-28 12:43:00 
10 2016-01-28 12:55:00 

In [228]:  
segments_data[segments_data.ts.dt.strftime('%H:%M:%S').between('00:00:00','12:00:00')] 
Out[228]: 
ts 
0 2016-01-28 07:43:00 
1 2016-01-28 07:52:00 
2 2016-01-28 08:00:00 
3 2016-01-28 08:42:00 
4 2016-01-28 09:18:00 
5 2016-01-28 09:18:00 
6 2016-01-28 09:18:00 
7 2016-01-28 09:23:00 
+0

它給了我一個錯誤'TypeError:無法比較datetime.time到str' – Neil

+0

我做了一個編輯,現在試試。 –