2016-05-24 2 views
0

Я хочу создать массив numpy из файла csv. Данные разделяются запятой, но выглядит следующим образом:Чтение Даты в виде имен столбцов Numpy genfromtxt

seqid 9/19/2009 9/26/2009 10/3/2009 
4315  228046  227475  239080 
19866  22241  27211  25313 
23436  23576  23678  24687 
23593  58074  61569  58564 
23609  334673  313980  246823 

Я хотел бы сохранить свои имена столбцов, как эти даты, в настоящее время я использую код:

mcvs = np.genfromtxt('csvfile.csv', delimiter=',', dtype=None, names=True) 

Когда я использую names=True я получаю 1 массив столбцов типа void.

Что мне здесь не хватает?

ответ

0

Работая с вашим образцом (используя пробел в качестве разделителя), я получаю 1d структурированный массив с 4 полями. Имена полей - это даты, лишенные символа /.

In [245]: np.genfromtxt(txt,dtype=None,names=True) 
Out[245]: 
array([(4315, 228046, 227475, 239080), (19866, 22241, 27211, 25313), 
     (23436, 23576, 23678, 24687), (23593, 58074, 61569, 58564), 
     (23609, 334673, 313980, 246823)], 
     dtype=[('seqid', '<i4'), ('9192009', '<i4'), ('9262009', '<i4'), ('1032009', '<i4')]) 

«столбцы/поля» доступны по имени поля:

In [252]: data['9192009'] 
Out[252]: array([228046, 22241, 23576, 58074, 334673]) 

(я буду смотреть на снятом персонажа немного)

type не является полезным тестом структурированных элементов массива. Используйте dtype:

In [247]: type(data[0]) 
Out[247]: numpy.void 

In [248]: data.dtype 
Out[248]: dtype([('seqid', '<i4'), ('9192009', '<i4'), ('9262009', '<i4'), ('1032009', '<i4')]) 

Параметр deletechars позволяет мне контролировать / удаляется ли или нет:

In [250]: np.genfromtxt(txt,dtype=None,names=True,deletechars='') 
Out[250]: 
array([(4315, 228046, 227475, 239080), (19866, 22241, 27211, 25313), 
     (23436, 23576, 23678, 24687), (23593, 58074, 61569, 58564), 
     (23609, 334673, 313980, 246823)], 
     dtype=[('seqid', '<i4'), ('9/19/2009', '<i4'), ('9/26/2009', '<i4'), ('10/3/2009', '<i4')]) 
Смежные вопросы