识别和删除时间序列中的无效时间步长

2024-04-26 04:04:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我找了一段时间的答案,但没有找到任何东西,所以原谅我,如果这个问题已经被问过了。。。你知道吗

我有一些2031-2050年未来气温预测的6小时时间序列数据。在查看数据时,我注意到数据集中从future.iloc[234]开始有一些错误的timedelta:

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

数据集继续使用正确的时间增量,但似乎重复了整整一个月的数据(即future.iloc[370] = 2031-03-31 18:00:00,这应该是future.iloc[234]之后的下一个时间步,并从这一点开始继续使用有效的数据)。我知道数据(重复的月份除外)是有效的,所以如果可以的话,我需要尝试恢复数据。我有很多这样的数据集,所以我现在担心它们可能也有错误的时间步长。你知道吗

我的目标是检查两点之间是否存在不一致的timedelta,并删除具有无效timedelta的行:

        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

或为空与无效timedelta关联的所有数据:

        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]是无效的timedelta。future.iloc[236:270]仍然是技术上正确的6H时间步,它们刚刚被偏移,这导致了重复。因此,要完全删除无效数据,我需要识别无效的timedelta和创建重复数据的有效timedelta。你知道吗

我试图用pd.date_range(start=future.iloc[0].time, end=future.iloc[-1].time, freq='6H')创建一个比较日期范围,并遍历我的行来查找错误的值。但是,我还没有找到一个解决方案来实际识别和删除错误行。你知道吗

有什么办法吗?我以为熊猫会有一些内置的功能,像这样的东西,但没有找到任何实质性的,符合我的需要。你知道吗

奖金:我尝试过的每一次检查似乎都要花上几分钟来浏览大约30000行数据。这个数量的行是否保证了这次的使用迭代?你知道吗


Tags: 数据答案time错误时间future序列nan
1条回答
网友
1楼 · 发布于 2024-04-26 04:04:04

要识别错误,可以进行此类测试:

1)你白天分组 2) 您使用数字项>;0和<;4来捕获组 3) 如果有错误列表,可以删除相应的行

errorlist=[]
def f(g):
    if g.shape[0] > 0 and g.shape[0] < 4:
        errorlist.append(g.index[0])
df.set_index('time').groupby(pd.Grouper(freq='D')).apply(f)

print(errorlist)

相关问题 更多 >