python - Slicing numpy recarray at "empty" rows -
i created numpy.recarray
.csv-inputfile using csv2rec()
-method. inputfile , consequently recarray have empty rows no data (resp. nan
-values). want slice recarray @ nan
-rows multiple sub-arrays, excluding nan
-rows in final arrays shown below.
original recarray 2 columns:
[(1,2) (2,2) (nan,nan) (nan,nan) (4,4) (4,3)]
2 sub-arrays without nan-values:
[(1,2) (2,2)]
and
[(4,4) (4,3)]
i know managed using loop maybe there's simpler , more elegant way? additionally: possible keep header-information of each column can refer columns parameter-name , not col-index after slicing?
for 2d-array
:
a[~np.all(np.isnan(a),axis=1)]
for structured array (recarray) can this:
def remove_nan(a, split=true): cols = [i[0] in eval(str(a.dtype))] col = cols[0] test = ~np.isnan(a[col]) if not split: new_len = len(a[col][test]) new = np.empty((new_len,), dtype=a.dtype) col in cols: new[col] = a[col][~np.isnan(a[col])] return new else: indices = [i in xrange(len(a)-1) if test[i+1]!=test[i]] return [i in np.split(a, indices) if not np.isnan(i[col][0])]
to lines without nan
use split=false
. example:
a = np.array([(1,2),(2,2),(nan,nan),(nan,nan),(4,4),(4,3)], dtype=[('test',float),('col2',float)]) remove_nan(a) #[array([(1.0, 2.0), (2.0, 2.0)], # dtype=[('test', '<f8'), ('col2', '<f8')]), # array([(4.0, 4.0), (4.0, 3.0)], # dtype=[('test', '<f8'), ('col2', '<f8')])]
Comments
Post a Comment