【问题标题】:Better way for resampling data in order to keep the authenticity of the data in Python? [closed]为了在 Python 中保持数据的真实性,重新采样数据的更好方法? [关闭]
【发布时间】:2020-11-28 09:44:13
【问题描述】:

我想重新采样我的数据,以便每个索引的日期时间间隔为 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秒记录一次。 所以,我问你,这个领域的专家,你认为哪种方法或算法最适合我的情况?

P.S.:我一直在寻找其他方法,例如 resample 但更好,但我没有找到合适的方法。但是,我对新想法持开放态度!让我知道是否应该添加有关该问题的其他详细信息。

非常感谢。

【问题讨论】:

    标签: python pandas datetime indexing time-series


    【解决方案1】:

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

    1. 已经重新创建了一个样本数据集,我在其中以 128 秒 间隔模拟了源数据,并有间隙
    2. 然后resample()512s 个桶
    3. 这可能意味着有 empty 个存储桶,其中 last 将是 NaN 和基础值的 list 为空
    4. 您需要决定在这些情况下要做什么。对于我对温度数据进行上采样的情况,我 dropna() 其他选项显然是 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]
    

    【讨论】:

      猜你喜欢
      • 2015-05-05
      • 1970-01-01
      • 2020-04-28
      • 1970-01-01
      • 2019-09-22
      • 1970-01-01
      • 2018-12-27
      • 2018-11-12
      • 1970-01-01
      相关资源
      最近更新 更多