我有一个日期时间字符串值列表。我想让它们从 00 小时到 24 小时每小时分发一次。
例如,一个示例列表:
['2021-06-18 14:39:54', '2021-06-18 08:30:26', '2021-06-18 15:07:12', '2021-06-18 13:13:29', '2021-06-18 11:27:48', '2021-06-19 09:25:26', '2021-06-19 16:14:38', '2021-06-19 13:41:31', '2021-06-19 15:09:42', '2021-06-19 03:24:29']
和预期的数据框视图:
date 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
0 2021-06-18 0 0 0 0 0 0 0 0 1 0 0 1 0 1 1 1 0 0 0 0 0 0 0 0 0
1 2021-06-19 0 0 0 1 0 0 0 0 0 1 0 0 0 1 0 1 1 0 0 0 0 0 0 0 0
我通过以下方式将值转换为日期时间:
time = datetime.strptime(item, '%Y-%m-%d %H:%M:%S')
并得到了时间
hr = time.hour
In 可以使用 if else 得到结果,但它太天真了。是他们优雅地做到这一点的一种方式。
TIA。
使用l
您的列表,您可以使用以下方法将其转换为一系列日期时间pd.to_datetime
>>> s = pd.Series(l).transform(pd.to_datetime)
>>> s
0 2021-06-18 14:39:54
1 2021-06-18 08:30:26
2 2021-06-18 15:07:12
3 2021-06-18 13:13:29
4 2021-06-18 11:27:48
5 2021-06-19 09:25:26
6 2021-06-19 16:14:38
7 2021-06-19 13:41:31
8 2021-06-19 15:09:42
9 2021-06-19 03:24:29
dtype: datetime64[ns]
从那里,有很多方法可以做到这一点,使用.dt
访问器值,在这里您对.dt.date
和感兴趣.dt.hour
。最短的是我相信使用pd.crosstab
:
>>> table = pd.crosstab(s.dt.date, s.dt.hour, rownames=['date'], colnames=['hour'])
>>> table
hour 3 8 9 11 13 14 15 16
date
2021-06-18 0 1 0 1 1 1 1 0
2021-06-19 1 0 1 0 1 0 1 1
如果您还想拥有所有缺失的时间,您当然可以reindex
:
>>> table.reindex(columns=pd.RangeIndex(0, 24), fill_value=0)
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
date
2021-06-18 0 0 0 0 0 0 0 0 1 0 0 1 0 1 1 1 0 0 0 0 0 0 0 0
2021-06-19 0 0 0 1 0 0 0 0 0 1 0 0 0 1 0 1 1 0 0 0 0 0 0 0
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句