Python Numpy Loadtxt - 转换unix时间戳

时间:2015-07-10 10:57:15

标签: python python-2.7 numpy matplotlib unix-timestamp

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

代码:

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

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

1 个答案:

答案 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,请使用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,加一。这些不是时间戳(从数据开始计算秒数) Epoch,1970-01-01 00:00:00 UTC):

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