Добавьте метки времени к данным в зависимости от начала эпохи Unix

1

У меня есть некоторые данные акселерометра, отобранные на частоте 10 Гц, я получаю метку времени Unix в начале передачи только один раз, в то время как остальные показания принимаются без какой-либо метки времени.

1540987236
0   8604,2152,14660
1   8588,2168,14712
2   8558,2180,14674
3   8586,2220,14676
4   8586,2216,14712
5   8632,2230,14656
6   8592,2182,14716
7   8592,2172,14644
8   8588,2190,14672
9   8608,2226,14682
10  8618,2210,14620
11  8616,2204,14580
12  8590,2194,14658
13  8580,2240,14714
14  8588,2234,14710
15  8608,2226,14682
16  8618,2210,14620
17  8616,2204,14580
18  8590,2194,14658
19  8580,2240,14714
20  8588,2234,14710
21  8608,2226,14682
22  8618,2210,14620
23  8616,2204,14580
24  8590,2194,14658
25  8580,2240,14714
26  8588,2234,14710
27  8608,2226,14682
28  8618,2210,14620
29  8616,2204,14580
30  8590,2194,14658
31  8580,2240,14714
32  8588,2234,14710

Здесь я хотел бы добавить 1540987236 к первым 9 показаниям в отдельном столбце, 1540987237 метку времени Unix на 1 секунду 1540987237 и добавить эту новую 1540987237 времени к следующим 10 показаниям и т.д. Для 3000 показаний (5 минут данные акселерометра).

Как я могу достичь этого в пандах? Мне в основном нужна серия, которая имеет ровно 10 временных меток в микросекундах, распределенных равномерно между 2 секундами.

Теги:
pandas

2 ответа

0

Используя datetime, вы можете написать что-то вроде этого:

#!/usr/bin/python3    
import pandas as pd
import datetime
import numpy as np

start = datetime.datetime.fromtimestamp(1540987236)
delta = datetime.timedelta(seconds=1)

df = pd.DataFrame({'a': np.random.randn(50)})

df['timestamp'] = [(i // 10 * delta + start).timestamp()
                   for i in range(len(df['a']))]
df['timestamp_readable'] = [str(i // 10 * delta + start)
                            for i in range(len(df['a']))]

DF будет выглядеть так:

               a     timestamp   timestamp_readable
0  -0.600697  1.540987e+09  2018-10-31 13:00:36
1  -1.480723  1.540987e+09  2018-10-31 13:00:36
2   0.662514  1.540987e+09  2018-10-31 13:00:36
3   0.006153  1.540987e+09  2018-10-31 13:00:36
4  -1.305551  1.540987e+09  2018-10-31 13:00:36
5   0.204650  1.540987e+09  2018-10-31 13:00:36
6   0.264038  1.540987e+09  2018-10-31 13:00:36
7  -1.182569  1.540987e+09  2018-10-31 13:00:36
8  -1.339297  1.540987e+09  2018-10-31 13:00:36
9  -0.079093  1.540987e+09  2018-10-31 13:00:36
10 -0.804870  1.540987e+09  2018-10-31 13:00:37
11  0.238080  1.540987e+09  2018-10-31 13:00:37
12  0.647706  1.540987e+09  2018-10-31 13:00:37
13  0.578003  1.540987e+09  2018-10-31 13:00:37
14  0.972857  1.540987e+09  2018-10-31 13:00:37
15  0.414544  1.540987e+09  2018-10-31 13:00:37
16  0.127489  1.540987e+09  2018-10-31 13:00:37
17  0.942130  1.540987e+09  2018-10-31 13:00:37
18 -0.871946  1.540987e+09  2018-10-31 13:00:37
19  0.347854  1.540987e+09  2018-10-31 13:00:37
20  0.986753  1.540987e+09  2018-10-31 13:00:38
21 -0.489212  1.540987e+09  2018-10-31 13:00:38
22 -0.814278  1.540987e+09  2018-10-31 13:00:38
23  0.396447  1.540987e+09  2018-10-31 13:00:38
24  0.642809  1.540987e+09  2018-10-31 13:00:38
25 -0.209376  1.540987e+09  2018-10-31 13:00:38
26  0.884612  1.540987e+09  2018-10-31 13:00:38
27 -0.565565  1.540987e+09  2018-10-31 13:00:38
28 -1.460945  1.540987e+09  2018-10-31 13:00:38
29 -0.541121  1.540987e+09  2018-10-31 13:00:38
30 -0.125047  1.540987e+09  2018-10-31 13:00:39
31 -0.421019  1.540987e+09  2018-10-31 13:00:39
32 -0.333257  1.540987e+09  2018-10-31 13:00:39
...
0

Я думаю, что вам нужно целочисленное деление на 10 и добавить метку времени Unix:

#default RangeIndex
df['dates'] = df.index // 10 + 1540987236

#general index
df['dates'] = np.arange(len(df.index)) // 10 + 1540987236
  • 1
    Отлично работает, спасибо.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню