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:
When I attempt to load the arrays without any data types defined then the load is successfull,
i.e. using
but when I attempt to apply data types, by specifying
I get the following output
Can anybody suggest why the difference or what I am specifying incorrectly as part of the data type specification?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
#!/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)) |
i.e. using
1 |
a1, a2 = np.loadtxt(data_file, usecols = col_tuple, delimiter = ',' , unpack = True ) |
1 |
a1, a2 = np.loadtxt(data_file, dtype = rec_type, usecols = col_tuple, delimiter = ',' , unpack = True ) |
1 2 3 4 5 6 |
list index out of range Closing price array: None Valuation array: None |