检测缺少的时间戳

时间:2018-11-14 23:40:15

标签: python pandas dataframe time-series

我有以下具有时间戳和值的数据帧。时间戳增加了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

2 个答案:

答案 0 :(得分:2)

如果您的目标是指出缺少时间戳的 ,则可以转换为日期时间,并使用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

>>> (pd.to_datetime(df['timestamp']).diff() > '00:00:05').any()
True

表明您确实在某处缺少时间戳

[EDIT] (按照@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')

答案 1 :(得分:0)

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