将数据从 csv 文件转换为 numpy 数组问题
Converting data from a csv file into numpy array issue
在 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})
非常感谢任何帮助。
你的日期格式不正确,它需要年月日 "%Y%m%d"
,你也不能在你的数组中有日期时间对象和浮点数,但使用结构化数组允许你有混合类型。
如果 mdates
returns 如果您有 ;
分隔线,使用正确格式的浮点数应该可以再次工作:
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
这假定您的输入实际上是由 ;
分隔的,并且没有像示例行中那样的空格。
在 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})
非常感谢任何帮助。
你的日期格式不正确,它需要年月日 "%Y%m%d"
,你也不能在你的数组中有日期时间对象和浮点数,但使用结构化数组允许你有混合类型。
如果 mdates
returns 如果您有 ;
分隔线,使用正确格式的浮点数应该可以再次工作:
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
这假定您的输入实际上是由 ;
分隔的,并且没有像示例行中那样的空格。