2013-05-31 5 views
1

я получил запись NumPy ndarray из файла CSV с помощьюВыбор диапазона строк из записи ndarray

data = matplotlib.mlab.csv2rec('./data.csv', delimiter=b',') 

Набор данных структурирована:

 date,a0,a1,a2,a3, b0, b1, b2, b3,[...], b9 
2012-01-01, 1, 2, 3, 4,0.1,0.2,0.3,0.4,[...],0.9 

Я хочу, чтобы выбрать (в SQL смысл) только столбцы b0 по b9 из массива, придающий конструкцию

b0, b1, b2, b3,[...], b9 
0.1,0.2,0.3,0.4,[...],0.9 

Вопрос «How can I use numpy array indexing to select 2 columns out of a 2D array to select unique values from?» аналогичен, но разрезает data[:,5:] как предложено броски IndexError: too many indices с массивом записей.

+0

Опубликовать дополнительную информацию о структуре вашего массива. Кажется, что это вопрос формы ... – kirelagin

ответ

1

Учитывая, что у вас есть массив записи, я думаю, что следующий будет работать:

data[['b' + str(j) for j in range(10)]] 

doc/introduction и cookbook

+0

Я пробовал 'data.dtype.names [5:]', в котором говорится 'ValueError: недействительный литерал для long() с базой 10'. Оказывается, вам нужно предоставить список, а не кортеж, который дает «.dtype.names». Поэтому 'data [list (data.dtype.names [5:])]' -basically то, что вы написали, работает по своему желанию. –

0

data[...,0:3] даст вам столбцы от 0 до 2.

data[...,[0,2,3]] даст вам столбцы 0, 2 и 3.

Дело в том, что у вас есть массив массивов, в то время как вопрос, который вы ссылки о 2D-массивы, которые немного отличаются. Смотрите также: Numpy Array Column Slicing Produces IndexError: invalid index Exception

+0

'data [..., 0: 3]' дает мне * строки * от 0 до 2. –

+0

Хм, позвольте мне посмотреть ... – kirelagin

+1

@Механическая почта да, как упоминалось в ответе, вы на самом деле имеют 1D-массив. Используйте информацию о ссылке, предоставленной для создания представления, или приступайте к использованию [pandas] (http://pandas.pydata.org), чтобы легче манипулировать данными в этом формате – Boud

1

Я знаю, что этот вопрос был дан ответ, но только хотел войти это, поскольку это связано - это что-то между Extracting specific columns in numpy array и Select Rows from Numpy Rec Array (но не совсем How to return a view of several columns in numpy structured array), это синтаксис, который я искал какое-то время, и, наконец, нашел его; скажем, это данные:

import numpy as np 

a = np.array([(1.5, 2.5, (1.0,2.0)), (3.,4.,(4.,5.)), (1.,3.,(2.,6.))], 
     dtype=[('x',float), ('y',float), ('value',float,(2,2))]) 

Я хочу что-то вроде SQL SELECT x,value FROM a WHERE y>=3.0 - то есть, выбирая только определенные столбцы по именам полей; и только некоторые строки по некоторым критериям; и правильный синтаксис, который был бы:

a[['x','value']][a['y']>=3.0] 
# [(3.0, [[4.0, 5.0], [4.0, 5.0]]) (1.0, [[2.0, 6.0], [2.0, 6.0]])] 

В то время как a[a['y']>=3.0] отлично работает, обратите внимание, что:

>>> print a[a['y']>=3.0]['x','value'] 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ValueError: setting an array element with a sequence. 

... Однако, если дополнительная пара скобок добавляются, как и в a[a['y']>=3.0][['x','value']] - все кажется снова работать.

Надеюсь, это кому-то поможет,
Приветствия!

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