numpy.loadtxt Unix 时间戳转换器

4

我有一个大文件,包含股票的OHLC价值和成交量。每一行都以unix时间戳开头。如何将它转换为numpy可以理解的datetime对象?下面是我的代码:

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个回答

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种类型的结构化数据类型:

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

但是一旦你使用unpack=True进行拆分,你将只得到一个包含每种类型的单个数组。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接