Создать массив с последовательными секундами - strptime - KeyError: 0 - PullRequest
0 голосов
/ 26 февраля 2020

Я пытаюсь создать массив, который преобразует минуты, секунды и миллисекунды в секунды и добавляет их последовательно.

У меня есть df с отметкой времени следующим образом:

        Time        Temp.
0   14:12:58:8230    135
1   14:12:59:0190    185
2   14:12:59:2150    138

Я делаю следующее, чтобы получить данные и получить доступ ко всем столбцам отметки времени с помощью datetime.strptime и создать массив. Но при запуске у меня, похоже, KeyError : 0.

elapsed_x = []
tmp_1 = []

for i in range (0, len(df)): 
    tmp = datetime.strptime(df.Time[i], '%H:%M:%S:%f') 
    tmp_ms = tmp.microsecond
    tmp_s = tmp.second
    tmp_min  = tmp.minute
    tmp_1.append(tmp_min*60 + tmp_s + tmp_ms/1000000)

for i in range (0, len(df)):     
    elapsed_x.append(tmp_1[i]-tmp_1[0])

Что я делаю не так?

Ответы [ 2 ]

1 голос
/ 26 февраля 2020

pandas может обрабатывать метку времени в векторизованном виде:

tm = pd.to_datetime(df['Time'], format='%H:%M:%S:%f')

df['elapsed'] = (tm - tm.iloc[0]) / np.timedelta64(1,'s')

print(df['elapsed'])

дает:

0    0.000
1    0.196
2    0.392
Name: Time, dtype: float64
1 голос
/ 26 февраля 2020

Сначала создайте столбец даты и времени, затем рассчитайте секунды и прошедшее время.

df['datetime'] = pd.to_datetime(df['Time'], format='%H:%M:%S:%f')
df['seconds'] = df.apply(lambda x : x['datetime'].hour*3600 + x['datetime'].minute*60 + x['datetime'].second + x['datetime'].microsecond/10**6, axis=1)
df['elapsed'] = df['seconds'] - df['seconds'].iloc[0]

Вывод:

            Time  Temp                datetime    seconds  elapsed
0  14:12:58:8230   135 1900-01-01 14:12:58.823  51178.823    0.000
1  14:12:59:0190   185 1900-01-01 14:12:59.019  51179.019    0.196
2  14:12:59:2150   138 1900-01-01 14:12:59.215  51179.215    0.392
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...