gpt4 book ai didi

python - 在pandas中填写时间数据

转载 作者:太空狗 更新时间:2023-10-30 01:57:28 25 4
gpt4 key购买 nike

我有每 15 秒的数据。但是,缺少一些值。这些没有用 NaN 标记,但根本不存在。我该如何填写这些值?
我尝试重新采样,但这也改变了我的原始数据。那么,为什么这不起作用:

a=pd.Series([1.,3.,4.,3.,5.],['2016-05-25 00:00:35','2016-05-25 00:00:50','2016-05-25 00:01:05','2016-05-25 00:01:35','2016-05-25 00:02:05'])                                   
a.index=pd.to_datetime(a.index)
a.resample('15S').mean()

In [368]: a
Out[368]:
2016-05-25 00:00:35 1.0
2016-05-25 00:00:50 3.0
2016-05-25 00:01:05 4.0
2016-05-25 00:01:35 3.0
2016-05-25 00:02:05 5.0
dtype: float64

它向我展示了这个:

2016-05-25 00:00:30    1.0
2016-05-25 00:00:45 3.0
2016-05-25 00:01:00 4.0
2016-05-25 00:01:15 NaN
2016-05-25 00:01:30 3.0
2016-05-25 00:01:45 NaN
2016-05-25 00:02:00 5.0
Freq: 15S, dtype: float64

因此,我不再有 00:35 或 00:50 的值。
对于我原来较大的数据集,我最终还会在重采样数据的末尾看到大组中的许多 NaN 值。
我想做的是将我的 15 秒数据重新采样到 15 秒,所以每当特定时间没有数据时,它应该使用它周围的值的平均值来填充它。有没有办法做到这一点?
另外,为什么在我重新采样时时间基础会改变?我的原始数据从 00:00:35 开始,重新采样后从 00:30 开始?好像偏移了 5 秒。
在我的示例数据中,它应该做的就是在 00:01:50 创建一个额外的数据条目。


编辑

我意识到我的数据比我想象的要复杂一些。 “基地”实际上改变了它的一部分。如果我使用下面的解决方案,那么它适用于部分数据,但随后值会停止变化。例如:

a = pd.Series([1.,3.,4.,3.,5.,6.,7.,8.], ['2016-05-25 00:00:35','2016-05-25 00:00:50','2016-05-25 00:01:05','2016-05-25 00:01:35','2016-05-25 00:02:05','2016-05-25 00:03:00','2016-05-25 00:04:00','2016-05-25 00:06:00'])                                   

In [79]: a
Out[79]:
2016-05-25 00:00:35 1.0
2016-05-25 00:00:50 3.0
2016-05-25 00:01:05 4.0
2016-05-25 00:01:35 3.0
2016-05-25 00:02:05 5.0
2016-05-25 00:03:00 6.0
2016-05-25 00:04:00 7.0
2016-05-25 00:06:00 8.0
dtype: float64

In [80]: a.index = pd.to_datetime(a.index)

In [81]: a.resample('15S', base=5).interpolate()
Out[81]:
2016-05-25 00:00:35 1.0
2016-05-25 00:00:50 3.0
2016-05-25 00:01:05 4.0
2016-05-25 00:01:20 3.5
2016-05-25 00:01:35 3.0
2016-05-25 00:01:50 4.0
2016-05-25 00:02:05 5.0
2016-05-25 00:02:20 5.0
2016-05-25 00:02:35 5.0
2016-05-25 00:02:50 5.0
2016-05-25 00:03:05 5.0
2016-05-25 00:03:20 5.0
2016-05-25 00:03:35 5.0
2016-05-25 00:03:50 5.0
2016-05-25 00:04:05 5.0
2016-05-25 00:04:20 5.0
2016-05-25 00:04:35 5.0
2016-05-25 00:04:50 5.0
2016-05-25 00:05:05 5.0
2016-05-25 00:05:20 5.0
2016-05-25 00:05:35 5.0
2016-05-25 00:05:50 5.0
Freq: 15S, dtype: float64

如您所见,它在 2:05 后停止插值,并且似乎忽略了 3:00、4:00 和 5:00 的数据。

最佳答案

@IanS 和@piRSquared 都解决了基数的移动问题。至于填充NaN:pandas有前向填充(.ffill()/.pad())和后向填充( .bfill()/.backfill()),但不是取均值。一种快速的方法是手动取平均值:

b = a.resample('15S', base=5)
(b.ffill() + b.bfill()) / 2

输出:

2016-05-25 00:00:35    1.0
2016-05-25 00:00:50 3.0
2016-05-25 00:01:05 4.0
2016-05-25 00:01:20 3.5
2016-05-25 00:01:35 3.0
2016-05-25 00:01:50 4.0
2016-05-25 00:02:05 5.0
Freq: 15S, dtype: float64

编辑:我纠正了:有一个内置方法:.interpolate()

a.resample('15S', base=5).interpolate()

关于python - 在pandas中填写时间数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39599192/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com