Tôi có 1 dữ liệu chiều thiết lập với một số không có giá trị dữ liệu được thiết lập như là 9999. Dưới đây là một trích vì nó là khá dài:Python: Thay thế các giá trị trong một mảng
this_array = [ 4, 4, 1, 9999, 9999, 9999, -5, -4, ... ]
Tôi muốn thay thế không có giá trị dữ liệu nào với giá trị trung bình gần nhất ở hai bên, tuy nhiên vì một số giá trị dữ liệu không có giá trị gần nhất cũng như không có giá trị dữ liệu, thay thế chúng khó hơn một chút. tức là tôi muốn ba giá trị dữ liệu không được thay thế bằng -2. Tôi đã tạo ra một vòng lặp để đi qua từng vô hướng trong mảng và thử nghiệm mà không có dữ liệu:
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
Tuy nhiên tôi cần phải thêm vào một nếu chức năng hoặc cách để có những giá trị trước k-1 hoặc sau khi k +1 nếu điều đó cũng bằng 9999 ví dụ:
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])
Như bạn có thể nói, mã này có thể kết thúc với giá trị sai hoặc kết thúc bằng vô số chức năng lồng nhau. Có ai biết một cách sạch hơn để thực hiện điều này vì nó khá biến trong suốt tập dữ liệu?
Theo yêu cầu: Nếu điểm đầu tiên và/hoặc cuối cùng không có dữ liệu, tốt nhất nên thay thế bằng điểm dữ liệu gần nhất.
Điều gì xảy ra nếu phần tử cuối cùng trong danh sách là '9999'? Bạn muốn thay thế giá trị nào? – Cameron
@Cameron Xin lỗi, nếu phần tử cuối cùng là '9999' thì nó có thể được thay thế bằng phần tử cuối cùng thứ hai. Cảm ơn. – AJEnvMap