按时间过滤pandas数据帧

Nei*_*eil 6 python datetime pandas

我有一个熊猫数据框,我希望按时间大于或小于12 pm.首先我将我的字符串日期时间转换为pandas中的datetime [64] ns对象.

segments_data['time'] = pd.to_datetime((segments_data['time']))
Run Code Online (Sandbox Code Playgroud)

然后我将时间,日期,月份,年份和日期分开如下.

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
Run Code Online (Sandbox Code Playgroud)

我的时间栏如下所示.

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
Run Code Online (Sandbox Code Playgroud)

现在我希望将数据帧的子集大于12pm,时间少于12pm.

segments_data.time[segments_data['time'] < 12:00:00]
Run Code Online (Sandbox Code Playgroud)

它不起作用因为timestring object.

Bob*_*ley 10

将列保留为原始日期时间,将其命名为ts:

segments_data['ts'] = pd.to_datetime((segments_data['time']))
Run Code Online (Sandbox Code Playgroud)

接下来,您可以将日期时间转换为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
Run Code Online (Sandbox Code Playgroud)

  • ` Between_time` 需要日期时间作为索引。我们如何将其应用到一列上?我错过了什么吗? (5认同)

Mik*_*ike 6

尽管这篇文章已经发布了 5 年,但我刚刚遇到了同样的问题,并决定发布我能够开始工作的内容。我尝试了 Between_time 函数,但这对我不起作用,因为数据帧上的索引必须是日期时间,并且我想使用数据帧时间列之一进行过滤。

        # Import datetime libraries
    from datetime import datetime, date, time
        
    avail_df['Start'].dt.time
            1   08:36:44
            2   08:49:14
            3   09:26:00
            5   08:34:22
            7   08:34:19
            8   09:09:05
            9   12:27:43
           10   12:29:14
           12   09:05:55
           13   09:14:11
           14   09:21:41
           15   11:28:26
           16   12:25:10
           17   16:02:52
           18   08:53:51


# Use "time()" function to create start/end parameter I used 9:00am for this example 
avail_df.loc[avail_df['Start'].dt.time > time(9,00)]

3   09:26:00
8   09:09:05
9   12:27:43
10  12:29:14
12  09:05:55
13  09:14:11
14  09:21:41
15  11:28:26
16  12:25:10
17  16:02:52
20  09:04:50
21  09:21:35
22  09:22:05
23  09:47:05
24  09:55:05
Run Code Online (Sandbox Code Playgroud)