关于Python Numpy Loadtxt:Python Numpy Loadtxt – 转换unix时间戳

Python Numpy Loadtxt - Convert unix timestamp

我有一个包含多行数据的文本文件——每行的第一段数据是一个Unix时间戳,如1436472000。我正在使用numpy.loadtxt,在转换器的参数中,我想为它指定将时间戳转换为numpy所理解的日期时间。我知道这需要在花括号中的0:之后进行,但我不知道如何转换它。我知道一个转换器可以在matplotlib.dates.strpdate2num中用于正常日期,但我认为它不适用于unix时间戳。

代码:

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

感谢您的事先帮助,请询问您是否希望我澄清我的意思。


虽然转换器很方便,但是速度很慢,因为每行数据都调用一次转换器。将时间戳加载到整数的numpy数组后,转换数据更快:

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

生成一个numpy datetime64s数组:

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

要获得python datetime.datetime的,请使用tolist()

1
2
3
>>> 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,加上一个。这些不是时间戳(从epoch,1970-01-01 00:00:00 UTC):

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