为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

炎炎设计 2023-05-09 10:55:13
我想重新采样我的数据,以便每个索引的日期时间之间的每个间隔有 512 秒。找到了resample方法pandas,但是不能正常使用,因为最后会修改太多原始数据(原始数据的真实性不一样)。但是,我想到了一种可能性,如果在日期时间之内,间隔只有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秒记录一次数据。所以,我问你们,这个领域的专家,你们认为最适合我的情况的方法或算法是什么?PS:我一直在寻找其他方法,比如 resample 但更好,但我没有找到合适的方法。但是,我愿意接受新想法!让我知道是否应该添加有关该问题的其他详细信息。非常感谢。
查看完整描述

1 回答

?
慕桂英4014372

TA贡献1871条经验 获得超13个赞

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

  1. 已经重新创建了一个示例数据集,我在其中以128 秒的间隔模拟了源数据

  2. 然后resample()512s

  3. 这可能意味着存在空桶,其中最后一个NaN并且基础值列表为

  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]


查看完整回答
反对 回复 2023-05-09
  • 1 回答
  • 0 关注
  • 96 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信