Я предполагаю, что ваш CSV выглядит примерно так (заменяя open и close на dur):
In [122]: txt = """
...: SITE NAME, POSTCODE, dur
...: Armadale (WA), 6112, 8.
...: Armidale (NSW), 2350, 8.5
...: Newport, 3015, 6.5
...: Townsville Jobseekers, 4814, 7.5
...: Albany, 6330, 6.5
...: """
Я могу загрузить его с помощью `genfromtxt:
In [124]: data = np.genfromtxt(txt.splitlines(), delimiter=',', dtype=None, names=True, encoding=None)
In [125]: data
Out[125]:
array([('Armadale (WA)', 6112, 8. ), ('Armidale (NSW)', 2350, 8.5),
('Newport', 3015, 6.5), ('Townsville Jobseekers', 4814, 7.5),
('Albany', 6330, 6.5)],
dtype=[('SITE_NAME', '<U21'), ('POSTCODE', '<i8'), ('dur', '<f8')])
и отобразитьэто как вы:
In [126]: for i in range(0,5):
...: print("List No:",i+1,data[i])
...:
List No: 1 ('Armadale (WA)', 6112, 8.)
List No: 2 ('Armidale (NSW)', 2350, 8.5)
List No: 3 ('Newport', 3015, 6.5)
List No: 4 ('Townsville Jobseekers', 4814, 7.5)
List No: 5 ('Albany', 6330, 6.5)
Обратите внимание, что dtype
для 1-го поля U21
- строка в кодировке Unicode.
С вашим dtype
:
In [127]: data = np.genfromtxt(txt.splitlines(), delimiter=',', dtype={'names':(
...: 'sitename', 'postcode', 'dur'),'formats':('S40', 'i4', 'f2')}, skip_he
...: ader=1, encoding=None)
In [128]: data
Out[128]:
array([(b'SITE NAME', -1, nan), (b'Armadale (WA)', 6112, 8. ),
(b'Armidale (NSW)', 2350, 8.5), (b'Newport', 3015, 6.5),
(b'Townsville Jobseekers', 4814, 7.5), (b'Albany', 6330, 6.5)],
dtype=[('sitename', 'S40'), ('postcode', '<i4'), ('dur', '<f2')])
У него есть флаг b
bytestrings, потому что вы указали dtype 'S40.
===
С вашим читателем CSV, я думаю, что итерация будет лучше с накоплениемсписка кортежей:
dt = {'names':('sitename', 'postcode', 'dur'),'formats':('U40', 'i4', 'f2')})
alist = []
with open(DATA_FILE) as f:
rows = csv.DictReader(f)
for row in rows:
sitename = row['SITE NAME']
postcode = row['POSTCODE']
Open = row['Open']
Close = row['Close']
dur = compute_opening_duration(Open, Close)
x = tuple((sitename + "," + postcode + "," + str(dur)).split(',')))
alist.append(x)
#print(x['sitename'])
opening_duration_list = np.array(alist, dtype=dt)
np.append
неудобно использовать вправо и медленно.И таким образом, вы должны использовать составной dtype только один раз.(Но поздравляю с тем, что np.append
заработал; особенно с составным dtype.)