检测丢失的时间戳

2024-04-30 06:23:47 发布

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

我有下面的数据帧有一个时间戳和值。时间戳增加5秒,请注意23:02:02和23:06:32之间缺少记录。在

有没有一种简单的方法来检测时间戳之间是否有缺失的记录?在

timestamp   value
23:01:27    2915
23:01:32    2916
23:01:37    2919
23:01:42    2924
23:01:47    2926
23:01:52    2928
23:01:57    2933
23:02:02    2937 # <- missing timestamp
23:06:32    3102 # <- between these lines
23:06:37    3109
23:06:42    3114
23:06:47    3122
23:06:52    3126
23:06:57    3129

Tags: 数据方法value记录时间betweentimestamplines
2条回答

您可以使用.diff()计算相邻时间戳之间的差大于某个阈值(例如7秒)。在

如果您的目标是指示其中缺少时间戳,则可以转换为datetime并使用diff查看行之间的时间差,然后使用>'00:00:05'查看间隔是否大于5秒:

>>> pd.to_datetime(df['timestamp']).diff() > '00:00:05'
0     False
1     False
2     False
3     False
4     False
5     False
6     False
7     False
8      True
9     False
10    False
11    False
12    False
13    False
Name: timestamp, dtype: bool

这表示您缺少索引8上的记录

如果您的目标仅仅是查看您是否缺少时间戳,请使用any

^{pr2}$

表明你确实在某处丢失了时间戳

[编辑]根据@JoranBeasley的建议,您还可以使用时差模式来推断所需频率:

d = pd.to_datetime(df['timestamp']).diff()

>>> (d > d.mode()[0])
0     False
1     False
2     False
3     False
4     False
5     False
6     False
7     False
8      True
9     False
10    False
11    False
12    False
13    False
Name: timestamp, dtype: bool

因为d.mode()[0]将返回观察到的最常见频率:

>>> d.mode()[0]
Timedelta('0 days 00:00:05')

相关问题 更多 >