Вы можете отфильтровать столбцы с nan
после прочтения.
In [52]: txt=b'antelope,1,0,0,1,0,0,0,1,1,1,0,0,4,1,0,1,1'
In [53]: txt=[txt,txt]
In [54]: A=np.genfromtxt(txt, dtype=float, names=None,delimiter=',')
In [55]: A
Out[55]:
array([[ nan, 1., 0., 0., 1., 0., 0., 0., 1., 1., 1.,
0., 0., 4., 1., 0., 1., 1.],
[ nan, 1., 0., 0., 1., 0., 0., 0., 1., 1., 1.,
0., 0., 4., 1., 0., 1., 1.]])
колонки с nan
во всех рядах; или я мог бы использовать .any
для столбцов с любыми nan
. Другие тесты возможны.
In [56]: ind=np.isnan(A).all(axis=0)
In [57]: ind
Out[57]:
array([ True, False, False, False, False, False, False, False, False,
False, False, False, False, False, False, False, False, False], dtype=bool)
In [58]: A[:,~ind]
Out[58]:
array([[ 1., 0., 0., 1., 0., 0., 0., 1., 1., 1., 0., 0., 4.,
1., 0., 1., 1.],
[ 1., 0., 0., 1., 0., 0., 0., 1., 1., 1., 0., 0., 4.,
1., 0., 1., 1.]])
Другая идея состоит в том, чтобы один раз прочитать файл с dtype=None
, позволяя genfromtxt
выбрать DTYPE для каждого столбца. Получающееся в результате соединение dtype может быть фильтром для поиска столбцов желаемого типа.
In [118]: A=np.genfromtxt(txt, dtype=None, names=None,delimiter=',')
In [119]: ind=[i for i, d in enumerate(A.dtype.descr) if d[1]=='<i4']
In [120]: A=np.genfromtxt(txt, dtype=None, names=None,delimiter=',',usecols=ind)
In [121]: A
Out[121]:
array([[1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 4, 1, 0, 1, 1],
[1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 4, 1, 0, 1, 1]])
DTYPE также может быть отфильтрован, чтобы собрать имена столбцов, которые являются правильным типом
In [128]: A=np.genfromtxt(txt, dtype=None, names=None,delimiter=',')
In [129]: ind=[d[0] for d in A.dtype.descr if d[1]=='<i4']
In [130]: A[ind]
Out[130]:
array([(1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 4, 1, 0, 1, 1),
(1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 4, 1, 0, 1, 1)],
dtype=[('f1', '<i4'), ('f2', '<i4'), ('f3', '<i4'), ('f4', '<i4'), ('f5', '<i4'), ('f6', '<i4'), ('f7', '<i4'), ('f8', '<i4'), ('f9', '<i4'), ('f10', '<i4'), ('f11', '<i4'), ('f12', '<i4'), ('f13', '<i4'), ('f14', '<i4'), ('f15', '<i4'), ('f16', '<i4'), ('f17', '<i4')])
Хотя консолидации этого структурированного массива в 2D-массив с одним DTYPE (INT), это немного боль (я мог бы вдаваться в подробности, если это необходимо).
Есть ли конкретная причина, по которой вам нужно использовать 'genfromtxt'? Это довольно простой пример использования [pandas] (http://pandas.pydata.org/) DataFrame. –
Нет. Я не в коробке с библиотеками. Как бы вы это сделали в панде? – lzc