2016-03-14 2 views
0

Я хочу заменить все значения, меньшие чем -999, NaN и значениями, лежащими в пределах от -999 до 0 с -0,1 в 2D-массиве.Заменить значения, попадающие в диапазон в 2D-массиве в python?

я могу заменить одно значение с помощью

data[data < -999] = 'nan' 

Однако, когда я использую

data[data < -999] = 'nan' 
data[data < 0] = -0.1 

Это говорит

RuntimeWarning: недопустимое значение встречается в менее
данных [данных < 0] = -0,1

Как заменить значения < -999 с NaN и значения в диапазоне от -999 до 0 с -0,1

+0

Просто чтобы быть ясно, , какой тип данных является «данными»? Что означает 'print (type (data))' return? – DSM

ответ

1

Ваша линия

data[data < -999] = 'nan' 

Не делать то, что вы думаете. data < -999 оценивает ложь в Python2.7, хотя это странная вещь; вы сравниваете список с int. Это означает, что выражение соответствует

data[0] = 'nan' 

Именно поэтому вы видите только одно изменение стоимости. Обратите внимание, что этот синтаксис не допускается в Python3

Похоже, что вы пытаетесь сделать

for column in data: 
    for ix, num in enumerate(column): 
     if num < -999: 
      column[ix] = 'nan' 
     elif num < 0: 
      column[ix] = -0.1 

Быстрый пример того, почему ваш не работает:

>>> data = [[-9999, -9999], [-9999, -9999]] 
>>> data[data<-999] = 'nan' 
>>> data 
['nan', [-9999, -9999]] 
>>> 
+0

Я использую Python 2.7 и должен заменить значения в 2D-массиве. 'data [data <-999] = 'nan'' отлично подходит для меня. Мне было интересно, смогу ли я использовать его дальше. – Mario

+0

@Mario Единственный способ, с которым он будет работать, будет, если единственное значение в данных меньше, чем '-999', является самым первым. См. Мой пример выше для контрпример к нему – DaveBensonPhillips

+0

Да, первое значение в 2D-массиве было -9999, но оно заменило все эти значения на «NaN», здесь цикл if else for for не работает для меня. – Mario

Смежные вопросы