Как фильтровать и добавлять массивы - PullRequest
0 голосов
/ 20 февраля 2020

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

from astropy.table import Table
import numpy as np

data = '/home/myname/data.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['M'])
mag.astype(float)

def stack(array1, array2, array3, array4):
    #stacks multiple arrays to have corresponding values next to eachother
    stacked_array = [(array1[i], array2[i], array3[i], array4[i]) for i in range(0, array1.size)]
    stacked_array = np.array(stacked_array)
    return(stacked_array) 

stacked = stack(ID, redshift, radius, mag)

filtered_array = np.array([])

for i in stacked:
    if not i.any == 'nan':
        np.insert(filtered_array, i[0], axis=0)

Последнее для l oop - это то, где у меня возникают трудности. Я хочу вставить строки из моего сложенного массива в отфильтрованный массив, если он содержит всю информацию (в некоторых строках отсутствует красное смещение, в других отсутствует величина и т. Д. c ...). Как бы я мог l oop по моему массиву и отфильтровать все строки, которые имеют все 4 значения, которые я хочу? Я продолжаю получать эту ошибку в настоящее время.

TypeError: _insert_dispatcher() missing 1 required positional argument: 'values'

Ответы [ 2 ]

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

Вы можете переключить:

for i in stacked:
    if not i.any == 'nan':
        np.insert(filtered_array, i[0], axis=0)

на:

def any_is_nan(col):
    return len(list(filter(lambda x: x=='nan',col))) > 0

filtered_array = list(filter(lambda x: not any_is_nan(x),stacked))

Пожалуйста, обратитесь к фильтр .

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

Так что-то вроде этого?

a=[[1,2,3,4],[1,"nan",2,3]]
b=[i for i in a if not any(j=='nan' for j in i)]

что печатает [[1, 2, 3, 4]].

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