【发布时间】:2019-07-31 02:08:57
【问题描述】:
我为此寻找了一段时间的答案,但一直没有找到任何东西,所以如果之前有人问过这个问题,请原谅我......
我有一些 6 小时的时间序列数据 future 来预测 2031-2050 年的未来温度。在查看数据时,我注意到数据集中从 future.iloc[234] 开始的时间增量有一些错误:
future.iloc[220:281]
time Temp
220 2031-03-28 00:00:00 68.276657
221 2031-03-28 06:00:00 68.270706
222 2031-03-28 12:00:00 68.264748
223 2031-03-28 18:00:00 68.258781
224 2031-03-29 00:00:00 68.252808
225 2031-03-29 06:00:00 68.246849
226 2031-03-29 12:00:00 68.240883
227 2031-03-29 18:00:00 68.234909
228 2031-03-30 00:00:00 68.228943
229 2031-03-30 06:00:00 68.222984
230 2031-03-30 12:00:00 68.217010
231 2031-03-30 18:00:00 68.211052
232 2031-03-31 00:00:00 68.205093
233 2031-03-31 06:00:00 68.199120
234 2031-03-31 12:00:00 68.193153
235 2031-02-26 00:00:00 68.187195
236 2031-02-26 06:00:00 68.181236
237 2031-02-26 12:00:00 68.175270
238 2031-02-26 18:00:00 68.169304
239 2031-02-27 00:00:00 68.163322
240 2031-02-27 06:00:00 68.169304
....
369 2031-03-31 12:00:00 68.193153
370 2031-03-31 18:00:00 68.258781
371 2031-04-01 00:00:00 67.950096
372 2031-04-01 06:00:00 67.949493
373 2031-04-01 12:00:00 67.949539
374 2031-04-01 18:00:00 67.950241
375 2031-04-02 00:00:00 67.951591
376 2031-04-02 06:00:00 67.953590
377 2031-04-02 12:00:00 67.955589
378 2031-04-02 18:00:00 67.957596
379 2031-04-03 00:00:00 67.959595
380 2031-04-03 06:00:00 67.961601
数据集在此 blip 之后以正确的时间增量继续,但似乎重复了整整一个月的数据(即 future.iloc[370] = 2031-03-31 18:00:00,这应该是 future.iloc[234] 之后的下一个时间步长,并从此时开始继续使用有效数据)。我知道数据(重复的月份除外)是有效的,所以如果可以的话,我需要尝试挽救数据。我有很多这样的数据集,所以我现在担心它们中的时间步长也可能有问题。
我的目标是检查两点之间的时间增量不一致,然后删除具有无效时间增量的行:
time Temp
220 2031-03-28 00:00:00 68.276657
221 2031-03-28 06:00:00 68.270706
222 2031-03-28 12:00:00 68.264748
223 2031-03-28 18:00:00 68.258781
224 2031-03-29 00:00:00 68.252808
225 2031-03-29 06:00:00 68.246849
226 2031-03-29 12:00:00 68.240883
227 2031-03-29 18:00:00 68.234909
228 2031-03-30 00:00:00 68.228943
229 2031-03-30 06:00:00 68.222984
230 2031-03-30 12:00:00 68.217010
231 2031-03-30 18:00:00 68.211052
232 2031-03-31 00:00:00 68.205093
233 2031-03-31 06:00:00 68.199120
234 2031-03-31 12:00:00 68.193153
235 2031-03-31 18:00:00 68.258781
236 2031-04-01 00:00:00 67.950096
237 2031-04-01 06:00:00 67.949493
238 2031-04-01 12:00:00 67.949539
239 2031-04-01 18:00:00 67.950241
240 2031-04-02 00:00:00 67.951591
241 2031-04-02 06:00:00 67.953590
242 2031-04-02 12:00:00 67.955589
243 2031-04-02 18:00:00 67.957596
244 2031-04-03 00:00:00 67.959595
245 2031-04-03 06:00:00 67.961601
或 null 所有与无效时间增量相关的数据:
time Temp
220 2031-03-28 00:00:00 68.276657
221 2031-03-28 06:00:00 68.270706
222 2031-03-28 12:00:00 68.264748
223 2031-03-28 18:00:00 68.258781
224 2031-03-29 00:00:00 68.252808
225 2031-03-29 06:00:00 68.246849
226 2031-03-29 12:00:00 68.240883
227 2031-03-29 18:00:00 68.234909
228 2031-03-30 00:00:00 68.228943
229 2031-03-30 06:00:00 68.222984
230 2031-03-30 12:00:00 68.217010
231 2031-03-30 18:00:00 68.211052
232 2031-03-31 00:00:00 68.205093
233 2031-03-31 06:00:00 68.199120
234 2031-03-31 12:00:00 68.193153
235 2031-02-26 00:00:00 NaN
236 2031-02-26 06:00:00 NaN
237 2031-02-26 12:00:00 NaN
238 2031-02-26 18:00:00 NaN
239 2031-02-27 00:00:00 NaN
240 2031-02-27 06:00:00 NaN
....
369 2031-03-31 12:00:00 NaN
370 2031-03-31 18:00:00 68.258781
371 2031-04-01 00:00:00 67.950096
372 2031-04-01 06:00:00 67.949493
373 2031-04-01 12:00:00 67.949539
374 2031-04-01 18:00:00 67.950241
375 2031-04-02 00:00:00 67.951591
376 2031-04-02 06:00:00 67.953590
377 2031-04-02 12:00:00 67.955589
378 2031-04-02 18:00:00 67.957596
379 2031-04-03 00:00:00 67.959595
380 2031-04-03 06:00:00 67.961601
我无法完全理解的真正问题是只有 future.iloc[235] 是无效的时间增量。 future.iloc[236:270] 在技术上仍然是正确的 6H 时间步,它们刚刚被偏移,这导致了重复。因此,要完全删除无效数据,我需要识别无效的时间增量以及创建重复数据的有效时间增量。
我尝试使用pd.date_range(start=future.iloc[0].time, end=future.iloc[-1].time, freq='6H') 创建比较日期范围,并遍历我的行以查找错误值。但是,我还没有想出一个能够真正识别和删除错误行的解决方案。
关于如何做到这一点的任何想法?我以为 pandas 会为类似的东西提供一些内置功能,但一直找不到适合我需要的实质性内容。
奖励:我尝试过的每一次检查似乎都需要花费一分钟来处理大约 30,000 行数据。这个行数是否保证这次使用迭代?
【问题讨论】:
-
“删除错误的行,或将与这些行关联的所有数据归零”到底是什么意思?当发现不一致的 timedelta 时,您想要删除日期在同一天的行?
-
@jmiguel 是的,以及与无效时间增量相关的任何数据。我在我的问题中添加了一些信息,希望能进一步澄清这一点。
标签: python pandas time-series python-xarray