Python中的分箱时间列

时间:2019-06-17 07:18:04

标签: python pandas time

我的Pandas数据框中有一个datetime列(作为对象类型)。我将datetime列分为两列date和time,并使用to_datetime将它们都转换为以下格式的代码,如下所示:

 df['Time'] =  pd.to_datetime(df['Time'], format='%H:%M:%S').dt.time
 df['Date'] =  pd.to_datetime(df['Date'], format='%Y.%m.%d')

执行上述代码后,我得到了Datetime类型的Date列和object类型的Time列(例如00:14:53)-我不知道为什么不使用Datetime,因为我曾经使用过to_datetime-

我想将时间列分为4个类别/箱,将00:00:00-06:00:00作为类别1,然后从06:00:00到12:00:00,依此类推。

我尝试了不同的切割方法,但都错了。

我做错了什么,有什么帮助吗?

谢谢

2 个答案:

答案 0 :(得分:1)

通过Series.dt.hourTime列转换为小时数,并使用cut进行装箱:

rng = pd.date_range('2017-04-03', periods=30, freq='H').strftime('%H:%M:%S')
df = pd.DataFrame({'Time': rng}) 

hours = pd.to_datetime(df['Time'], format='%H:%M:%S').dt.hour

df['cats'] = pd.cut(hours, 
                    bins=[0,6,12,18,24], 
                    include_lowest=True, 
                    labels=['cat1','cat2','cat3','cat4'])

print (df)
        Time  cats
0   00:00:00  cat1
1   01:00:00  cat1
2   02:00:00  cat1
3   03:00:00  cat1
4   04:00:00  cat1
5   05:00:00  cat1
6   06:00:00  cat1
7   07:00:00  cat2
8   08:00:00  cat2
9   09:00:00  cat2
10  10:00:00  cat2
11  11:00:00  cat2
12  12:00:00  cat2
13  13:00:00  cat3
14  14:00:00  cat3
15  15:00:00  cat3
16  16:00:00  cat3
17  17:00:00  cat3
18  18:00:00  cat3
19  19:00:00  cat4
20  20:00:00  cat4
21  21:00:00  cat4
22  22:00:00  cat4
23  23:00:00  cat4
24  00:00:00  cat1
25  01:00:00  cat1
26  02:00:00  cat1
27  03:00:00  cat1
28  04:00:00  cat1
29  05:00:00  cat1

答案 1 :(得分:0)

  1. 将日期转换为unix时间戳
def convert_to_unix(s):
    return time.mktime(datetime.strptime(s, "%Y-%m-%d %H:%M:%S").timetuple())
  1. 然后将时间戳从秒(60 * 60)转换为小时,然后将其除以时间间隔(在这种情况下为6小时)
df['bins'] = np.array(  [ int ( convert_to_unix(i) / 60 * 60 * 6) for i in df['Time']]  )

之后您可以更改类别。