numpy.loadtxt unix时间戳转换器

时间:2015-09-17 20:55:52

标签: python datetime numpy

我有一个由OHLC库存值和数量组成的大文件。每行以unix时间戳开头。如何将其转换为numpy将理解的日期时间对象。这是我的代码:

entry_timestamp, entry_close, entry_high, entry_low, entry_open, entry_volume = \
    np.loadtxt(filename, delimiter = ',', unpack = True,
               converters = { 0 : lambda data: datetime.datetime.fromtimestamp(float(data))})

以下是我尝试加载到数组中的示例数据行:

  

1441197159,75.54,100

1441197159 是unix时间戳。我知道如何手动将其转换为日期时间对象,但如何将其作为转换器传递给np.loadtxt?感谢

1 个答案:

答案 0 :(得分:3)

实际上你的转换器工作得很好。问题是转换器的输出必须与输出数组的dtype匹配,默认情况下为float64。因此,您要创建一个datetime的数组,然后尝试将其保存到float数组中。

您必须在运行loadtxt后进行更改,或使用结构化的dtype,如下所示:

import numpy as np
from datetime.datetime import fromtimestamp

filename = 'tmp.txt'

entry_timestamp, entry_close, entry_high, entry_low, entry_open, entry_volume = \
    np.loadtxt(filename, dtype='O,'+'f8,'*5, delimiter=',', unpack=True,
               converters={0: lambda d: fromtimestamp(float(d))})

'O'代表np.dtype('O')dtype=object'f8'当然意味着np.dtype('float64')。总之,这为您提供了6种类型的结构化dtype:

>>> np.dtype('O,'+'f8,'*5)
dtype([('f0', 'O'), ('f1', '<f8'), ('f2', '<f8'), ('f3', '<f8'), ('f4', '<f8'), ('f5', '<f8')])

但是一旦你用unpack=True拆分它,你就会有一个单独的数组。