我的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,依此类推。
我尝试了不同的切割方法,但都错了。
我做错了什么,有什么帮助吗?
谢谢
答案 0 :(得分:1)
通过Series.dt.hour
将Time
列转换为小时数,并使用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)
def convert_to_unix(s):
return time.mktime(datetime.strptime(s, "%Y-%m-%d %H:%M:%S").timetuple())
df['bins'] = np.array( [ int ( convert_to_unix(i) / 60 * 60 * 6) for i in df['Time']] )
之后您可以更改类别。