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