2015-08-25 3 views
1

Возможно, на это был дан ответ раньше, но мне сложно найти вопрос. Предположим, у меня есть следующие данные в файле:Как разбить смешанный массив dtype 1D numpy?

date, id, int1, int2, int3 
02/03/2015, 2, 23, 65, 99 
10/06/2016, 4, 84, 12, 35 
10/01/2017, 6, 53, 6, 78 

я могу быстро написать Numpy фрагмент кода в виде:

import StringIO 
import numpy as np 

hdr = 'date, id, int1, int2, int3' 
date = ''' 
02/03/2015, 2, 23, 65, 99 
10/06/2016, 4, 84, 12, 35 
10/01/2017, 6, 53, 6, 78 
''' 
lines = '%s%s' % (hdr, date) 
pseudo_file = StringIO.StringIO(lines) 
np_dtypes = 'S10,%s' % ','.join(['i4' for x in hdr.split(',')[1:]]) 

np1 = np.genfromtxt(pseudo_file, delimiter=',', names=True, dtype=np_dtypes) 

print np1 
print np1.dtype.names 
print np1.shape 
print np1['date'] 
print np1['int3'] 

Это даст мне следующий вывод:

[('02/03/2015', 2, 23, 65, 99) ('10/06/2016', 4, 84, 12, 35) 
('10/01/2017', 6, 53, 6, 78)] 
('date', 'id', 'int1', 'int2', 'int3') 
(3L,) 
['02/03/2015' '10/06/2016' '10/01/2017'] 
[99 35 78] 

Можно видеть, что numpy смог успешно проанализировать массив. Однако как разделить это на две части:

  1. 1D массив с только строками (столбец дат);
  2. Другие 1D массивы с целыми числами.

Разделение должно выполняться таким образом, чтобы сохранить структуру имен для каждой колонки.

ответ

0

Разве вы не разделили нитки с помощью np1['date']? Для того, чтобы сохранить свое имя столбца, вы можете поместить 'дата' имя столбца в списке (спасибо @hpaulj):

dates=np1[['date']] 
dates 
#array([('02/03/2015',), ('10/06/2016',), ('10/01/2017',)], 
#  dtype=[('date', 'S10')]) 

И получить Интс:

ints=np1[['int1','int2','int3']] 
ints 
#array([(23, 65, 99), (84, 12, 35), (53, 6, 78)], 
#  dtype=[('int1', '<i4'), ('int2', '<i4'), ('int3', '<i4')]) 
+1

'даты = NP1 [[» date ']] 'должен работать для столбца (ов) даты, как и в списке' int '. – hpaulj

+0

Спасибо @tom. Мне не хватало основного использования (и до сих пор). Мне понадобилось бы время подумать над этим решением. В основном потому, что я искал методы numpy. лол. ;-) Приветствия. –

+0

@hpaulj, который не сохраняет имя столбца, в котором задан вопрос – tom

Смежные вопросы