在python中保持原始点值的同时增加采样时间

在python中保持原始点值的同时增加采样时间,python,signals,sampling,resampling,Python,Signals,Sampling,Resampling,我有一个任意大小的间隔不均匀的时间序列(例如7),见下文,我希望增加采样(50)并保留原始点 ls = ['2016-01-30 12:10:00', '2016-01-30 12:23:35', '2016-01-30 12:24:14', '2016-01-30 12:24:51', '2016-01-30 12:25:00', '2016-01-30 12:26:49', '2016-01-30 12:27:36'] 存储新时间戳的时间间隔基本上无关紧

我有一个任意大小的间隔不均匀的时间序列(例如7),见下文,我希望增加采样(50)并保留原始点

ls = ['2016-01-30 12:10:00', 
  '2016-01-30 12:23:35', 
  '2016-01-30 12:24:14', 
  '2016-01-30 12:24:51', 
  '2016-01-30 12:25:00', 
  '2016-01-30 12:26:49', 
  '2016-01-30 12:27:36']
存储新时间戳的时间间隔基本上无关紧要,但最好是根据时间间隔。因此,时间间隔越大,生成的新时间戳越多,例如

new_ls = ['2016-01-30 12:10:00',
      x,
      x,
      x,
      x,
  '2016-01-30 12:23:35',
      x,
      x,
  '2016-01-30 12:24:14',
  '2016-01-30 12:24:51',
  '2016-01-30 12:25:00',
      x,
  '2016-01-30 12:26:49',
  '2016-01-30 12:27:36']
生成的列表也可能间隔不均。
提前感谢

首先将列表转换为
pd.DatetimeIndex
,并在开始和结束之间找到理想的时间戳分布:

import pandas as pd
import numpy as np

ls = pd.to_datetime(['2016-01-30 12:10:00', 
                     '2016-01-30 12:23:35', 
                     '2016-01-30 12:24:14', 
                     '2016-01-30 12:24:51', 
                     '2016-01-30 12:25:00', 
                     '2016-01-30 12:26:49', 
                     '2016-01-30 12:27:36'])

n = 50
dt = (ls.max() - ls.min())/n
ls_temp = pd.date_range(start=ls.min(), end=ls.max(), freq=dt)
然后找出原始测量值的放置位置,例如,用最小绝对差替换条目:

idx = np.abs(ls[:,None] - ls_temp[None, :]).argmin(axis=1)
ls_temp = pd.Series(ls_temp)
ls_temp[idx] = pd.Series(ls)
请注意,此策略在某些边缘情况下可能会失败(其中一个索引被两个值或类似的值替换)

最后,您可以将其转换回您的格式,例如:

ls = list(map("{:%Y-%m-%d %H:%M:%S}".format, ls_temp.tolist()))
输出:

['2016-01-30 12:10:00',
 '2016-01-30 12:10:21',
 '2016-01-30 12:10:42',
 '2016-01-30 12:11:03',
 '2016-01-30 12:11:24',
 '2016-01-30 12:11:45',
 '2016-01-30 12:12:06',
 '2016-01-30 12:12:27',
 '2016-01-30 12:12:48',
 '2016-01-30 12:13:10',
 '2016-01-30 12:13:31',
 '2016-01-30 12:13:52',
 '2016-01-30 12:14:13',
 '2016-01-30 12:14:34',
 '2016-01-30 12:14:55',
 '2016-01-30 12:15:16',
 '2016-01-30 12:15:37',
 '2016-01-30 12:15:59',
 '2016-01-30 12:16:20',
 '2016-01-30 12:16:41',
 '2016-01-30 12:17:02',
 '2016-01-30 12:17:23',
 '2016-01-30 12:17:44',
 '2016-01-30 12:18:05',
 '2016-01-30 12:18:26',
 '2016-01-30 12:18:48',
 '2016-01-30 12:19:09',
 '2016-01-30 12:19:30',
 '2016-01-30 12:19:51',
 '2016-01-30 12:20:12',
 '2016-01-30 12:20:33',
 '2016-01-30 12:20:54',
 '2016-01-30 12:21:15',
 '2016-01-30 12:21:36',
 '2016-01-30 12:21:58',
 '2016-01-30 12:22:19',
 '2016-01-30 12:22:40',
 '2016-01-30 12:23:01',
 '2016-01-30 12:23:22',
 '2016-01-30 12:23:35',
 '2016-01-30 12:24:14',
 '2016-01-30 12:24:25',
 '2016-01-30 12:24:51',
 '2016-01-30 12:25:00',
 '2016-01-30 12:25:29',
 '2016-01-30 12:25:50',
 '2016-01-30 12:26:11',
 '2016-01-30 12:26:32',
 '2016-01-30 12:26:49',
 '2016-01-30 12:27:14',
 '2016-01-30 12:27:36']

但是,如果您想对与这些时间戳关联的数据进行重采样,最好将其保留为
pd.Series
,并跳过最后一步。总之,最后你可能会想使用它。

谢谢@Graipher!!这正是我想要的。用绝对差值最小的条目替换原始测量值的技巧是我真正被卡住的地方。谢谢!我将使用车辆的平均速度对相关数据点进行重采样。@但是,请注意,在某些边缘情况下(例如,一个索引被两个值或类似的值替换),它可能不起作用。