ich ein 1 dimensionalen Datensatz mit einigen ohne Datenwerte haben, die hier als 9999. gesetzt werden, ist ein Extrakt, wie es ist ziemlich lang:Python: Werte in einem Array austauschen
this_array = [ 4, 4, 1, 9999, 9999, 9999, -5, -4, ... ]
Ich möchte ersetzen die keine Datenwerte mit dem Durchschnitt der nächsten Werte auf beiden Seiten, da jedoch einige Datenwerte keine engsten Werte haben, wie auch keine Datenwerte, ist es etwas schwieriger, sie zu ersetzen. , d. H. Ich möchte, dass die drei Nicht-Datenwerte durch -2 ersetzt werden. Ich habe eine Schleife geschaffen durch jede der Skalare in dem Array und Test für keine Daten zu gehen:
for k in this_array:
if k == 9999:
temp = np.where(k == 9999, (abs(this_array[k-1]-this_array[k+1])/2), this_array[k])
else:
pass
this_array[k] = temp
Jedoch muss ich in eine hinzuzufügen, wenn Funktion oder Weg, um den Wert vor der k-1 oder nach dem k zu nehmen +1, wenn diese auch gleich 9999 zB:
if np.logical_or(k+1 == 9999, k-1 == 9999):
temp = np.where(k == 9999, (abs(this_array[k-2]-this_array[k+2])/2), this_array[k])
wie man sagen kann, dieser Code wird chaotisch wie man den falschen Wert unter oder enden mit vielen verschachtelten wenn Funktionen können am Ende. Kennt jemand eine sauberere Möglichkeit, dies zu implementieren, da es im gesamten Datensatz ziemlich variabel ist?
Wie angefordert: Wenn die ersten und/oder letzten Punkte keine Daten sind, werden sie vorzugsweise durch den nächsten Datenpunkt ersetzt.
Was ist, wenn das letzte Element in der Liste '9999' ist? Um welchen Wert soll es ersetzt werden? – Cameron
@Cameron Entschuldigung, wenn das letzte Element '9999' ist, kann es durch das zweitletzte Element ersetzt werden. Vielen Dank. – AJEnvMap