2015-07-10 3 views
3

У меня есть текстовый файл со многими строками данных - первая часть данных в каждой строке является временной отметкой unix, такой как 1436472000. Я использую numpy.loadtxt, и в параметрах для конвертеров я хочу указать для него, чтобы преобразовать метку времени в любое число, которое понимается как время даты. Я знаю, что это должно идти после 0: в фигурных скобках, но я не могу понять, как его преобразовать. Я знаю, что конвертер может использоваться от matplotlib.dates.strpdate2num для обычных дат, но я не буду работать для временных меток unix.Python Numpy Loadtxt - конвертировать временную метку unix

Код:

timestamp, closep, highp, lowp, openp, volume = np.loadtxt(fileName,delimiter=",",unpack=True,converters={ 0: }) 

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

ответ

5

Хотя преобразователи могут быть удобными, они медленны, потому что они вызываются один раз для каждой строки данных. Это быстрее, чтобы преобразовать данные после того, как временные метки загружаются в массив NumPy целых чисел:

x = np.array([1436472000, 1436472001]) 
x = np.asarray(x, dtype='datetime64[s]') 

дает массив NumPy datetime64s:

array(['2015-07-09T16:00:00-0400', '2015-07-09T16:00:01-0400'], 
     dtype='datetime64[s]') 

Чтобы получить Python datetime.datetime s использование tolist():

>>> x.tolist() 
# [datetime.datetime(2015, 7, 9, 20, 0), 
# datetime.datetime(2015, 7, 9, 20, 0, 1)] 

Как вам известно, matplotlib datenums посчитайте число дней с 0001-01-01 00:00:00 UTC, плюс один. Это не временные метки (которые сосчитать секунды с Эпохи, 1970-01-01 00:00:00 UTC):

>>> matplotlib.dates.date2num(x.tolist()) 
# array([ 735788.83333333, 735788.83334491]) 
+1

Genius! Работает отлично, именно то, что я хотел - большое вам спасибо. – user5036748

Смежные вопросы