Astropy: удалить строки, содержащие нан

Я использую astropy для управления таблицей FITS и хочу удалить все строки, содержащие nan.

С таблицей подгонок, хранящейся в mytable, я попробовал следующее

data = np.lib.recfunctions.structured_to_unstructured(np.array(mytable))
idx = []
for i, line in enumerate(data):
    for e in line:
        if e !=e:
            idx.append(i)
data = Table([data[i] for i in range(len(data)) if i not in idx])

который, кажется, работает, но довольно неуклюж. Есть ли более питонический способ сделать это?


Я хочу удалить всю строку, если один из элементов в этой строке является nan. Этот вопрос отличается, поскольку речь идет об удалении отдельных элементов.


person usernumber    schedule 02.04.2020    source источник


Ответы (1)


Более num-pythonic способ сделать это:

data = np.lib.recfunctions.structured_to_unstructured(np.array(mytable))
has_nan = np.any(np.isnan(data), axis=1)
mytable_no_nan = mytable[~has_nan]

Для более общего и астро-питоновского способа (при условии, что mytable является астропией Table):

has_nan = np.zeros(len(mytable), dtype=bool)
for col in mytable.itercols():
    if col.info.dtype.kind == 'f':
        has_nan |= np.isnan(col)
mytable_no_nan = mytable[~has_nan]
person Tom Aldcroft    schedule 02.04.2020