преобразование строки в np.array с помощью datetime64, НЕ используя панд - PullRequest
1 голос
/ 31 марта 2019

Я ищу способ преобразования дат, заданных в формате YYYYmmdd, в массив np.array с dtype = 'datetime64'.Даты хранятся в другом файле np.array, но с dtype = 'float64'.

Я ищу способ добиться этого, избегая панд!

Я уже пробовал нечто подобное, как предложено вэто ответ , но автор заявляет, что «[...] если (формат даты) был в ISO 8601, вы можете разобрать его напрямую, используя numpy, [...]».

Так как формат даты в моем случае - ГГГГммдд, что является (?) ISO 8601, должно быть как-то возможно его проанализировать напрямую, используя numpy.Но я не знаю как, поскольку я абсолютный новичок в Python и программировании в целом.

Я действительно стараюсь избегать Панд, потому что я не хочу раздувать свой сценарий, когда есть способ выполнить задачу, используя модули, которые я уже использую.Я также читал, что это уменьшит скорость здесь .

Ответы [ 2 ]

2 голосов
/ 31 марта 2019

Если никто не придумает что-то более встроенное, вот пешеходный метод:

>>> dates
array([19700101., 19700102., 19700103., 19700104., 19700105., 19700106.,
       19700107., 19700108., 19700109., 19700110., 19700111., 19700112.,
       19700113., 19700114.])
>>> y, m, d = dates.astype(int) // np.c_[[10000, 100, 1]] % np.c_[[10000, 100, 100]]
>>> y.astype('U4').astype('M8') + (m-1).astype('m8[M]') + (d-1).astype('m8[D]')
array(['1970-01-01', '1970-01-02', '1970-01-03', '1970-01-04',
       '1970-01-05', '1970-01-06', '1970-01-07', '1970-01-08',
       '1970-01-09', '1970-01-10', '1970-01-11', '1970-01-12',
       '1970-01-13', '1970-01-14'], dtype='datetime64[D]')
0 голосов
/ 02 апреля 2019

Вы можете пройти через модуль даты и времени python.

from datetime import datetime
import numpy as np

datestrings = np.array(["18930201", "19840404"])
dtarray = np.array([datetime.strptime(d, "%Y%m%d") for d in datestrings], dtype="datetime64[D]")
print(dtarray)

# out: ['1893-02-01' '1984-04-04'] datetime64[D]

Поскольку реальный вопрос , кажется, как получить данные строки в формате даты / времени matplotlib,

from datetime import datetime
import numpy as np
from matplotlib import dates as mdates

datestrings = np.array(["18930201", "19840404"])
mpldates = mdates.datestr2num(datestrings)
print(mpldates)

# out: [691071. 724370.]
...