Проверьте значения Nan в столбце ND-Array и удалите их

Код ниже был написан для проверки значений NaN в столбце Python ND-Array. Если в temparr1 или temparr2 есть NaN, мы удаляем соответствующую строку из них обоих. Проблема в том, что это не работает. Не могли бы вы помочь мне?

        temparr1=arr[index[indexkey]][:]// We get a column from arr, an nd-array of size 0 to 9470
        temparr2=arr[index[secondIndexKey]][:]// Same as above, but with the next column
        rwc=range(0,len(arr)) We get a bit vector of a sort to check.
        for i in range(0,len(arr)):
            if(isnan(temparr1[i]) or isnan(temparr2[i]) ):
                rwc = rwc[:i-1]+rwc[i+1:] // Remove the value from the bit Vector for a NaN value in the arrays.
                print i
        temparr1 = []
        temparr2 = []
        for i in rwc:
            temparr1.append(arr[index[indexkey]][i])
            temparr2.append(arr[index[secondIndexKey]][i])// Extract the data for the corresponding values in RWC and get them into the temparrs.

Может кто-нибудь сказать мне, почему это не работает, почему я все еще получаю NaNs??

Массив выглядит следующим образом: [99,242,122,nan,42,nan,414,................]

1 ответ

Решение

После rwc=range(0,len(arr)) у тебя есть len(rwc)=len(arr)так что в очереди rwc = rwc[:i-1]+rwc[i+1:] вы ожидаете, что i такой же индекс для rwc а также arr,

Однако после того, как вы rwc = rwc[:i-1]+rwc[i+1:] Вы получаете список меньшей длины (len(rwc) = len(arr) -2), поэтому во время следующей итерации вы начнете удалять неправильные элементы из вашего списка.

Также я подозреваю, что вы намеревались сделать rwc = rwc[:i]+rwc[i+1:], что является еще одной ошибкой

Насколько я понимаю, вы пытались сделать что-то вроде этого:

X=arr[index[indexkey]]
Y=arr[index[secondIndexKey]]

temparr1 = []
temparr2 = []
for i in range(len(X)):  #I assume len(X)=len(Y)
    if not (isnan(X[i]) or isnan(Y[i])):
        temparr1.append(X[i])
        temparr2.append(Y[i])
Другие вопросы по тегам