我有一个由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?感谢
答案 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
拆分它,你就会有一个单独的数组。