将数据从csv文件转换为numpy数组问题

时间:2015-06-30 21:47:08

标签: python csv numpy type-conversion

在csv文件中,我有表示特定股票的日期,开盘价,收盘价,最高价,最低价和成交量的数据。数据以下列格式存储:

20150601 000000;1.094990;1.095010;1.094990;1.094990;0

我试图使用以下代码将日期提取到numpy数组中,以便我可以使用算法分析数据。但是,在转换日期时,我没有得到正确的日期。

任何人都可以识别我正在制作的错误吗?

datefunc = lambda x: mdates.date2num(datetime.strptime(x, '%y%m%d%H%M %f'))
date,high,low,open,close,volume = np.loadtxt('DAT_ASCII_EURUSD_M1_201506.csv',unpack=True, 
                              delimiter=';',
                              converters={0:datefunc})

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

您的日期格式不正确,需要年,月和日"%Y%m%d",您也不能拥有日期时间对象并在您的数组中浮动,但使用结构化数组可以让您拥有混合类型。

如果mdates使用正确的格式返回浮点数,则应该再次使用,前提是您有;分隔的行:

from datetime import datetime
import numpy as np
datefunc = lambda x: mdates.date2num(datetime.strptime(x, '%Y%m%d'))

a = np.loadtxt('in.csv', delimiter=';',
                  converters={0: datefunc})

哪个会输出:

[  7.35750000e+05   0.00000000e+00   1.09499000e+00   1.09501000e+00
1.09499000e+00   1.09499000e+00   0.00000000e+00]

你的示例输入行中有七个元素,因此你会得到一个错误的解包,如果这是一个错字,那么它会没问题,但如果没有,你将需要修复它。

如果您有混合类型,则可以使用带genfromtxt的结构化数组:

from datetime import datetime
import numpy as np
datefunc = lambda x: datetime.strptime(x, '%Y%m%d')
a = np.genfromtxt('in.csv', delimiter=';',
              converters={0: datefunc}, dtype='object, float, float,float,float,float',
              names=["date", "high", "low", "open", "close", "volume"])

print(a["date"])
print(a["high"])
print(a["low"])
print(a["open"])
print(a["close"])
print(a["volume"])

2015-06-01 00:00:00
0.0
1.09499
1.09501
1.09499
1.09499

这假设您的输入实际上由;分隔,并且没有您的样本行中的空格。