裁剪时间
Cropping the time
我有一个 python 列表,格式如下。
time_list = ['2021-02-04 02:40:00', '2021-02-04 02:41:00', '2021-02-04 02:42:00', '2021-02-04 02:44:00', '2021-02-04 03:01:00', '2021-02-04 03:02:00', '2021-02-04 03:03:00', '2021-02-04 03:04:00', '2021-02-04 03:05:00']
我需要时间像
answer_list = [{'start': '2021-02-04 02:40:00', 'end': '2021-02-04 02:44:00'}, {'start': '2021-02-04 03:01:00', 'end': '2021-02-04 03:05:00'}]
我尝试了多种方法,没有一种看起来是正确的。谁能告诉我该怎么做,或者有什么模块可以裁剪吗?
在我看来,您想要按 小时 列出开始和结束时间。如果我对此是正确的,那么“作物”不是正确的术语,而是你的意思是“组”。 (但如果我错了请纠正我。)
这是一个算法,不是很花哨,但应该可以做到:
from dateutil import parser as dp
time_list = ['2021-02-04 02:40:00', '2021-02-04 02:41:00', '2021-02-04 02:42:00', '2021-02-04 02:44:00', '2021-02-04 03:01:00', '2021-02-04 03:02:00', '2021-02-04 03:03:00', '2021-02-04 03:04:00', '2021-02-04 03:05:00']
answer_list = []
start = None
for dtm in time_list:
d = dp.parse(dtm)
if start is None:
start = d
hour = d.hour
elif hour == d.hour:
end = d
continue
else:
answer_list.append(dict(start=str(start),end=str(end)))
start = d
hour = d.hour
answer_list.append(dict(start=str(start),end=str(end)))
print(answer_list)
输出:
[{'start': '2021-02-04 02:40:00', 'end': '2021-02-04 02:44:00'}, {'start': '2021-02-04 03:01:00', 'end': '2021-02-04 03:05:00'}]
您还可以使用 pandas 来更轻松地分组和操作此数据:
import pandas as pd
time_list = ['2021-02-04 02:40:00', '2021-02-04 02:41:00', '2021-02-04 02:42:00', '2021-02-04 02:44:00', '2021-02-04 03:01:00', '2021-02-04 03:02:00', '2021-02-04 03:03:00', '2021-02-04 03:04:00', '2021-02-04 03:05:00']
df = pd.DataFrame(dict(datetime=time_list),index=pd.DatetimeIndex(time_list))
df['Hour'] = [d.hour for d in df.index]
print(df)
datetime Hour
2021-02-04 02:40:00 2021-02-04 02:40:00 2
2021-02-04 02:41:00 2021-02-04 02:41:00 2
2021-02-04 02:42:00 2021-02-04 02:42:00 2
2021-02-04 02:44:00 2021-02-04 02:44:00 2
2021-02-04 03:01:00 2021-02-04 03:01:00 3
2021-02-04 03:02:00 2021-02-04 03:02:00 3
2021-02-04 03:03:00 2021-02-04 03:03:00 3
2021-02-04 03:04:00 2021-02-04 03:04:00 3
2021-02-04 03:05:00 2021-02-04 03:05:00 3
现在您可以这样做:
print(df.groupby('Hour').first())
datetime
Hour
2 2021-02-04 02:40:00
3 2021-02-04 03:01:00
print(df.groupby('Hour').last())
datetime
Hour
2 2021-02-04 02:44:00
3 2021-02-04 03:05:00
还有...
answer_list = []
gbh = df.groupby('Hour')
for start,end in zip(gbh.first().values,gbh.last().values):
answer_list.append(dict(start=start[0],end=end[0]))
print(answer_list)
[{'start': '2021-02-04 02:40:00', 'end': '2021-02-04 02:44:00'}, {'start': '2021-02-04 03:01:00', 'end': '2021-02-04 03:05:00'}]
我有一个 python 列表,格式如下。
time_list = ['2021-02-04 02:40:00', '2021-02-04 02:41:00', '2021-02-04 02:42:00', '2021-02-04 02:44:00', '2021-02-04 03:01:00', '2021-02-04 03:02:00', '2021-02-04 03:03:00', '2021-02-04 03:04:00', '2021-02-04 03:05:00']
我需要时间像
answer_list = [{'start': '2021-02-04 02:40:00', 'end': '2021-02-04 02:44:00'}, {'start': '2021-02-04 03:01:00', 'end': '2021-02-04 03:05:00'}]
我尝试了多种方法,没有一种看起来是正确的。谁能告诉我该怎么做,或者有什么模块可以裁剪吗?
在我看来,您想要按 小时 列出开始和结束时间。如果我对此是正确的,那么“作物”不是正确的术语,而是你的意思是“组”。 (但如果我错了请纠正我。)
这是一个算法,不是很花哨,但应该可以做到:
from dateutil import parser as dp
time_list = ['2021-02-04 02:40:00', '2021-02-04 02:41:00', '2021-02-04 02:42:00', '2021-02-04 02:44:00', '2021-02-04 03:01:00', '2021-02-04 03:02:00', '2021-02-04 03:03:00', '2021-02-04 03:04:00', '2021-02-04 03:05:00']
answer_list = []
start = None
for dtm in time_list:
d = dp.parse(dtm)
if start is None:
start = d
hour = d.hour
elif hour == d.hour:
end = d
continue
else:
answer_list.append(dict(start=str(start),end=str(end)))
start = d
hour = d.hour
answer_list.append(dict(start=str(start),end=str(end)))
print(answer_list)
输出:
[{'start': '2021-02-04 02:40:00', 'end': '2021-02-04 02:44:00'}, {'start': '2021-02-04 03:01:00', 'end': '2021-02-04 03:05:00'}]
您还可以使用 pandas 来更轻松地分组和操作此数据:
import pandas as pd
time_list = ['2021-02-04 02:40:00', '2021-02-04 02:41:00', '2021-02-04 02:42:00', '2021-02-04 02:44:00', '2021-02-04 03:01:00', '2021-02-04 03:02:00', '2021-02-04 03:03:00', '2021-02-04 03:04:00', '2021-02-04 03:05:00']
df = pd.DataFrame(dict(datetime=time_list),index=pd.DatetimeIndex(time_list))
df['Hour'] = [d.hour for d in df.index]
print(df)
datetime Hour
2021-02-04 02:40:00 2021-02-04 02:40:00 2
2021-02-04 02:41:00 2021-02-04 02:41:00 2
2021-02-04 02:42:00 2021-02-04 02:42:00 2
2021-02-04 02:44:00 2021-02-04 02:44:00 2
2021-02-04 03:01:00 2021-02-04 03:01:00 3
2021-02-04 03:02:00 2021-02-04 03:02:00 3
2021-02-04 03:03:00 2021-02-04 03:03:00 3
2021-02-04 03:04:00 2021-02-04 03:04:00 3
2021-02-04 03:05:00 2021-02-04 03:05:00 3
现在您可以这样做:
print(df.groupby('Hour').first())
datetime
Hour
2 2021-02-04 02:40:00
3 2021-02-04 03:01:00
print(df.groupby('Hour').last())
datetime
Hour
2 2021-02-04 02:44:00
3 2021-02-04 03:05:00
还有...
answer_list = []
gbh = df.groupby('Hour')
for start,end in zip(gbh.first().values,gbh.last().values):
answer_list.append(dict(start=start[0],end=end[0]))
print(answer_list)
[{'start': '2021-02-04 02:40:00', 'end': '2021-02-04 02:44:00'}, {'start': '2021-02-04 03:01:00', 'end': '2021-02-04 03:05:00'}]