Обнаружение пропущенной временной метки - PullRequest
0 голосов
/ 15 ноября 2018

У меня есть следующий фрейм данных, имеющий метку времени и значение.Отметка времени увеличивается на 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 голосов
/ 15 ноября 2018

Вы можете использовать .diff () , чтобы вычислить разницу между соседними временными метками, превышающими определенный порог (например, 7 секунд).

0 голосов
/ 15 ноября 2018

Если ваша цель - указать , где , вам не хватает временных отметок, вы можете преобразовать в 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:

>>> (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')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...