Как удалить строку из массива / таблицы numpy, если она пуста - PullRequest
0 голосов
/ 18 февраля 2020

У меня есть numpy массивы, каждый длиной около 2000, но не каждый элемент имеет значение. Некоторые пустые. Как вы можете видеть в конце кода, я сложил их в один «матч». Как бы удалить строку в совпадении, если отсутствует элемент. Так, например, если конкретный идентификатор пропускает величину, он удаляет всю строку. Меня интересует только сохранение строк, в которых есть данные для всех элементов.

from astropy.table import Table
import numpy as np

data = '/home/myname/datable.fits'
data = Table.read(data, format="fits") 

ID = np.array(data['ID'])
ID.astype(str)

redshift = np.array(data['z'])
redshift.astype(float)

radius = np.array(data['r']) 
radius.astype(float)

mag = np.array(data['MAG'])
mag.astype(float)

match = (ID, redshift, radius, mag)
np.stack(match, axis=1)

1 Ответ

0 голосов
/ 18 февраля 2020

Здесь вы можете использовать метод numpy .isnan, который дает true для пропущенных значений и false для существующих значений. Но numpy .isnan может применяться к NumPy массивам собственного dtype (например, np.float64).

Ваше требование может быть достигнуто следующим образом:

Примечание: рассмотрение данных ваш массив numpy.

import numpy as np

data = np.array(some_array) # set data as your numpy array
key_col = np.array(data[:,0], dtype=np.float64) # If you want to filter based on column 0
filtered_data = data[~np.isnan(key_col)] # ~ is the logical not here 

Для большей гибкости рассмотрите возможность использования pandas !! Надеюсь, это поможет !!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...