Получение фантома 'b' при преобразовании массива объектов numpy в datetime - PullRequest
0 голосов
/ 04 мая 2020

У меня большой набор данных со многими столбцами. Я делаю каждый столбец массивом. Первый столбец - время в $H:$M:$S

00:00:00
00:00:01
00:00:02
...
23:59:58
23:59:59

Когда я помещаю это в массив, он создает массив объектов. Я использую это, чтобы преобразовать его в datetime:

time1=np.array2string(time)                  
dt.datetime.strptime(time1, "%H:%M:%S")

Тем не менее, я получаю сообщение об ошибке:

ValueError: time data "[b'00:00:00' b'00:01:00' b'00:02:00' ... b'23:57:00' b'23:58:00'\n b'23:59:00']" does not match format '%H:%M:%S'

Когда я смотрю на фактический массив, он действительно имеет этот фантом ' b ', но в моем наборе данных нет' b '. Он генерирует его из воздуха. Что вызывает это?

ОБНОВЛЕНИЕ:

Я попытался

time1=np.array2string(time)                  
time_strings = [dt.datetime.strptime(t, "%H:%M:%S") for t in time1]

и получил ошибку:

ValueError: time data '[' does not match format '%H:%M:%S'

Не уверен, почему скобка там. Кажется, он все еще делает «б».

1 Ответ

1 голос
/ 04 мая 2020

ваш ввод выглядит как массив байтовых объектов. вам нужно будет декодировать байты в строку, прежде чем вы сможете проанализировать их с помощью strptime. пример:

from datetime import datetime
import numpy as np

time = np.array([b'00:00:00', b'00:00:01', b'00:00:02'])

dt_list = [datetime.strptime(t.decode(encoding='utf-8'), "%H:%M:%S") for t in time]

# dt_list 
# [datetime.datetime(1900, 1, 1, 0, 0),
#  datetime.datetime(1900, 1, 1, 0, 0, 1),
#  datetime.datetime(1900, 1, 1, 0, 0, 2)]

примечание: по умолчанию используется utf-8, настройте, если у вас другая кодировка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...