我有一系列时间戳,如下所示:
from datetime import datetime
dts = [datetime(2018, 12, 21, 10), datetime(2018, 12, 21, 11), datetime(2018, 12, 21, 12)]
它们之间可能有间隙,也可能没有间隙,但是每个时间戳代表一个1小时的时间段。我想将其重新采样为代表30分钟周期的30分钟时间戳序列,如下所示:
[datetime(2018, 12, 21, 10, 0), datetime(2018, 12, 21, 10, 30), datetime(2018, 12, 21, 11, 0), datetime(2018, 12, 21, 11, 30), datetime(2018, 12, 21, 12, 0), datetime(2018, 12, 21, 12, 30)]
。
我能得到的最接近的是(ab)使用熊猫:
import pandas as pd
s = pd.Series(dts, index=pd.DatetimeIndex(dts))
s.asfreq('30T').index
这给我以下内容
DatetimeIndex(['2018-12-21 10:00:00', '2018-12-21 10:30:00',
'2018-12-21 11:00:00', '2018-12-21 11:30:00',
'2018-12-21 12:00:00'],
dtype='datetime64[ns]', freq='30T')
请注意,它没有“ 2018-12-21 12:30:00”。
答案 0 :(得分:1)
您不需要pandas
。您可以使用timedelta
向datetime
对象添加时间间隔。
您可以使用map
将间隔应用于dts
中的每个元素,然后使用zip
和list
创建新的交错列表。
from datetime import datetime
from datetime import timedelta
dts = [datetime(2018, 12, 21, 10), datetime(2018, 12, 21, 11), datetime(2018, 12, 21, 12)]
new_dts = list(zip(dts, map(lambda x: x + timedelta(minutes=30), dts)))
答案 1 :(得分:1)
使用date_range
pd.date_range(start=dts[0],end=dts[-1]+pd.Timedelta('30min'),freq='30min').tolist()
Out[203]:
[Timestamp('2018-12-21 10:00:00', freq='30T'),
Timestamp('2018-12-21 10:30:00', freq='30T'),
Timestamp('2018-12-21 11:00:00', freq='30T'),
Timestamp('2018-12-21 11:30:00', freq='30T'),
Timestamp('2018-12-21 12:00:00', freq='30T'),
Timestamp('2018-12-21 12:30:00', freq='30T')]