Nov-05-2018, 09:09 PM
I'm attempting to load 2 arrays from 2 columns read from a file . The file is delimited and I'm using numpy's loadtxt() function to load the arrays, like so:
i.e. using
#!/usr/bin/python3 import sys import numpy as np import os.path as op from datetime import datetime, date, time from io import StringIO sample_data = StringIO("AAPL,28-01-2011, ,344.17,344.4,333.53,336.1,21144800\n\ AAPL,31-01-2011, ,335.8,340.04,334.3,339.32,13473000\n\ AAPL,01-02-2011, ,341.3,345.65,340.98,345.03,15236800\n\ AAPL,02-02-2011, ,344.45,345.25,343.55,344.32,9242600\n\ AAPL,03-02-2011, ,343.8,344.24,338.55,343.44,14064100\n\ AAPL,04-02-2011, ,343.61,346.7,343.51,346.5,11494200") def usage(): print("usage: {} {}".format(op.basename(sys.argv[0], 'filename'))) def get_weekday(date_str): return datetime.strptime(date_str, "%d-%m-%Y").date().weekday() def load_arrays(data_file, *col_tuple): a1 = a2 = None rec_type = np.dtype([('stock_code', '|S4'), ('cob_date', '|S10'), ('filler', '|S1'), ('low_price', 'f4'), ('high_price', 'f4'), ('close_price', 'f4'), ('valuation', 'f4'), ('volume', 'uint') ]) try: a1, a2 = np.loadtxt(data_file, dtype=rec_type, usecols=col_tuple, delimiter=',', unpack=True) # a1, a2 = np.loadtxt(data_file, usecols=col_tuple, delimiter=',', unpack=True) except IOError as e: usage() # failed to open file except Exception as e: print(e) return a1, a2 try: # data_file = sys.argv[0] data_file = sample_data c, v = load_arrays(data_file, 5, 6) except IndexError: usage() print("Closing price array:\n{}".format(c)) print("\nValuation array:\n{}".format(v))When I attempt to load the arrays without any data types defined then the load is successfull,
i.e. using
a1, a2 = np.loadtxt(data_file, usecols=col_tuple, delimiter=',', unpack=True)but when I attempt to apply data types, by specifying
a1, a2 = np.loadtxt(data_file, dtype=rec_type, usecols=col_tuple, delimiter=',', unpack=True)I get the following output
list index out of range Closing price array: None Valuation array: NoneCan anybody suggest why the difference or what I am specifying incorrectly as part of the data type specification?