Как игнорировать значения NaN из списка? - PullRequest
0 голосов
/ 18 июня 2020

У меня есть файл Excel со столбцом, состоящим из измерений, например:

Измерения

24235

325434

Это пустое, поэтому это значение NaN

45345

I Я извлекаю этот столбец из Excel в список python, в результате получаем: list = ['24235', '325434', 'nan', '45435'] . Я хочу игнорировать значения NaN, чтобы иметь возможность рассчитать общее измерение. У меня есть это, чтобы не принимать во внимание значения NaN, но он не работает:

if list[i] != 'nan' or list[i] != float('NaN'):
    counter += int(list[i])

Он вводит оператор if , даже если он ложный. Как я могу это исправить?

Ответы [ 2 ]

1 голос
/ 18 июня 2020

Вы можете отфильтровать элементы 'nan' следующим образом:

original = ['24235', '325434', 'nan', '45435']
filtered = [int(element) for element in original if element != 'nan']
print(sum(filtered))

Вывод:

395104
0 голосов
/ 18 июня 2020

try, except ValueError

используйте try except и предотвратите if..else олдскульный стиль. это более эффективно и избавит вас от написания длинных и сложных logi c. обратите внимание на мои комментарии inline

# init the counter
counter = 0    
# iterate on the list and pick list element one by one
for each in f:         
  try:
    # .. doWork() ... 
    counter += int(each)  # convert the element to int. if something wrong we will get ValueError which we will catch/except later.
  except ValueError:      # if we get valueerror exception that   means we hit nan. so we skip and continue. 
    pass   # you can use continue instead of using pass, both are valid!

Мы хотим исключить только ValueError исключения, потому что это вызвано недопустимым преобразованием int(), например int(nan). для каждого исключения мы хотим его поднять!

...