在Python中重新采样数据以保持数据真实性的更好方法



我想对我的数据重新采样,以便在每个索引的日期-时间之间每个间隔有512秒。我从pandas中找到了resample方法,但它不能正常工作,因为原始数据最终会被修改得太多(原始数据的真实性不一样(。然而,我考虑了一种可能性,如果在日期时间内,间隔只有2个数字,并且它们也可以相互分割(512:4=128(。问题是,它们的出现可以算作任何数字。

使用以下代码计算指数的区间:

intervals = np.array(round(df.index.to_series().diff().dt.total_seconds().fillna(0)))

我的索引间隔如下:(因为我的数据每4或512秒记录一次(

{4, 4, 4, 4, 4, 4, 4, 4, 4, 512,512, 512, 512, 512, 512, 512, 4, 4, 4, 4, 4, 512, 512, 512, 4, 4, 4, 4, 4, 4, 4, 4, 512, 4, 4, 4, 4, 512, 512, 521, 512, ...}

问题是,有时数据每4秒记录一次,持续5分钟(因此没有足够的时间来实现512(,然后它可能会出现512,以此类推,就像上面的例子一样。这是一个问题,因为我最初认为也许我应该每512秒循环一次,然后删除所有不在该间隔内的行。(我删除了它们,因为我只需要每512秒记录一次数据,实际上没有必要知道间隔内的数据是什么。这可能会增加数据,但变化会很大。(我需要将其设置为每512个,但不使用重采样方法,因为如果我观察良好,它会破坏数据的真实性。

总之,两个主要条件是:第一,尊重并保持数据的真实性;第二,数据最终应每512秒记录一次。所以,我想问你,这个领域的专家,你认为这是最适合我的情况的方法或算法吗?

第页。S.:我一直在寻找其他方法,比如重新采样,但更好,但我没有找到合适的方法。然而,我对新的想法持开放态度!请告诉我是否应该添加有关该问题的其他细节。

非常感谢。

通过resample()不会丢失数据的真实性

  1. 重新创建了一个样本数据集,我在其中模拟了128s间隔的源数据
  2. resample()512s
  3. 这可能意味着存在桶,其中最后将为NaN,并且基础值的列表
  4. 在这种情况下,你需要决定你想做什么。对于上采样温度数据Idropna()的情况,其他选项显然是fillna()
  5. 由于NaN的存在,您应该考虑dfr = df.resample("512s")["val"].agg(last="last", vals=lambda s: list(s)).astype({"last":"Int64"})来维护列的数据类型(即从int64更改为float64

总之,没有丢失源数据的完整性。您需要决定如何处理没有适合*bin的基础数据的情况*
d = [d for d in pd.date_range(dt.datetime(2019,5,1,2), 
dt.datetime(2019,5,1,4), freq="128s") 
if random.randint(0,3) < 2 ] # miss some sample times... so resampling will give NaNs
df = pd.DataFrame({"ts":d, "val":[random.randint(0,50) for x in d]}).set_index("ts")
dfr = df.resample("512s")["val"].agg(last="last", vals=lambda s: list(s))
dfr

输出

last          vals
ts                                     
2019-05-01 01:59:28  27.0   [1, 41, 27]
2019-05-01 02:08:00  48.0  [14, 14, 48]
2019-05-01 02:16:32  43.0   [2, 49, 43]
2019-05-01 02:25:04  43.0          [43]
2019-05-01 02:33:36  44.0          [44]
2019-05-01 02:42:08  38.0      [39, 38]
2019-05-01 02:50:40  37.0          [37]
2019-05-01 02:59:12  25.0      [39, 25]
2019-05-01 03:07:44   1.0    [29, 8, 1]
2019-05-01 03:16:16  35.0  [12, 20, 35]
2019-05-01 03:24:48  33.0      [20, 33]
2019-05-01 03:33:20   5.0       [11, 5]
2019-05-01 03:41:52   NaN            []
2019-05-01 03:50:24   9.0           [9]

最新更新