Проверьте значения 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])