low*_*ame 1 python numpy python-imaging-library pandas
我被困在这个问题上,因为我不太确定如何提出这个问题,所以这是我最好的尝试!
我有一个元组列表,代表特定时间戳的温度读数。
[
(datetime.datetime(2022, 11, 30, 8, 25, 10, 261853), 19.82),
(datetime.datetime(2022, 11, 30, 8, 27, 22, 479093), 20.01),
(datetime.datetime(2022, 11, 30, 8, 27, 36, 984757), 19.96),
(datetime.datetime(2022, 11, 30, 8, 36, 46, 651432), 21.25),
(datetime.datetime(2022, 11, 30, 8, 41, 27, 230438), 21.42),
...
(datetime.datetime(2022, 11, 30, 11, 57, 4, 689363), 17.8)
]
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,记录之间的差异无处不在 - 有些相隔几秒钟,而另一些则相隔几分钟。
从这些中,我想创建一个新的元组列表(或其他数据结构 - 我很高兴使用 NumPy 或 Pandas),其中时间戳值恰好每 5 分钟一次,而温度读数则计算为该时间戳的假设值鉴于可用的数据。像这样的东西:
[
(datetime.datetime(2022, 11, 30, 8, 25, 0, 0), ??),
(datetime.datetime(2022, 11, 30, 8, 30, 0, 0), ??),
(datetime.datetime(2022, 11, 30, 8, 35, 0, 0), ??),
(datetime.datetime(2022, 11, 30, 8, 40, 0, 0), ??),
...
(datetime.datetime(2022, 11, 30, 11, 30, 0, 0), ??),
]
Run Code Online (Sandbox Code Playgroud)
我的最终目标是能够使用 PIL 绘制这些数据,但不能使用 MatPlotLib,因为我的硬件非常有限。鉴于我手头上的数据不完善,我想在给定时间段内绘制一条平滑的温度线。
假设lst输入列表,您可以使用:
import pandas as pd
out = (
pd.DataFrame(lst).set_index(0).resample('5min')
.mean().interpolate('linear')
.reset_index().to_numpy().tolist()
)
Run Code Online (Sandbox Code Playgroud)
如果你真的想要一个元组列表:
out = list(map(tuple, out))
Run Code Online (Sandbox Code Playgroud)
输出:
[[Timestamp('2022-11-30 08:25:00'), 19.930000000000003],
[Timestamp('2022-11-30 08:30:00'), 20.590000000000003],
[Timestamp('2022-11-30 08:35:00'), 21.25],
[Timestamp('2022-11-30 08:40:00'), 21.42],
[Timestamp('2022-11-30 08:45:00'), 21.32717948717949],
[Timestamp('2022-11-30 08:50:00'), 21.234358974358976],
...
[Timestamp('2022-11-30 11:45:00'), 17.985641025641026],
[Timestamp('2022-11-30 11:50:00'), 17.892820512820514],
[Timestamp('2022-11-30 11:55:00'), 17.8]]
Run Code Online (Sandbox Code Playgroud)
对于日期时间类型:
out = (
pd.DataFrame(lst).set_index(0).resample('5min')
.mean().interpolate('linear')[1]
)
out = list(zip(out.index.to_pydatetime(), out))
Run Code Online (Sandbox Code Playgroud)
输出:
[(datetime.datetime(2022, 11, 30, 8, 25), 19.930000000000003),
(datetime.datetime(2022, 11, 30, 8, 30), 20.590000000000003),
(datetime.datetime(2022, 11, 30, 8, 35), 21.25),
(datetime.datetime(2022, 11, 30, 8, 40), 21.42),
(datetime.datetime(2022, 11, 30, 8, 45), 21.32717948717949),
(datetime.datetime(2022, 11, 30, 8, 50), 21.234358974358976),
...
(datetime.datetime(2022, 11, 30, 11, 45), 17.985641025641026),
(datetime.datetime(2022, 11, 30, 11, 50), 17.892820512820514),
(datetime.datetime(2022, 11, 30, 11, 55), 17.8)]
Run Code Online (Sandbox Code Playgroud)
重采样之前/之后:
| 归档时间: |
|
| 查看次数: |
44 次 |
| 最近记录: |