Написание понимания списка с помощью оператора if else - PullRequest
0 голосов
/ 28 января 2020

Я пытаюсь написать понимание списка, где, если значение является целым числом, оно умножится на 1 000 000, но если это не целое число, значение будет 'np.NaN'.

Вот мой код:

energy['Energy Supply'] = [n*1000000 if isinstance(n,int) == True else n == 'np.Nan' for n in energy['Energy Supply']]

Возвращен фрейм данных, показывающий столбец ['Энергоснабжение'] с False, где не было целого числа.

Затем я попытался написать другое понимание списка, чтобы решить проблему:

energy['Energy Supply'] = [n.replace(to_replace='False',value='np.Nan') for n in energy['Energy Supply']]

Я получил эту ошибку:

--------- -------------------------------------------------- ---------------- AttributeError Traceback (последний вызов был последним) в () 5 energy ['Energy Supply'] = [n.replace (to_replace = 'False', value = ' np.Nan ') для n в энергии [' Энергоснабжение ']] 6 возврат энергии ----> 7 answer_one ()

в answer_one () 3 energy.columns = [' Country ',' Energy Запас »,« Энергоснабжение на душу населения »,«% возобновляемой энергии »] 4 энергии [« Энергоснабжение »] = [n * 1000000, если isinstance (n, int) == True иначе n == str ('np.nan') для n в энергии ['Energy Supply']] ----> 5 энергии ['Energy Supply'] = [n.replace (to_replace = 'False', значение = 'np.Nan') для n в энергии [' Энергоснабжение ']] 6 возврат энергии 7 answer_one ()

in (.0) 3 energy.columns = [' Country ',' Энергоснабжение ',' Энергоснабжение на душу населения ','% возобновляемых источников энергии]] 4 энергии ['Энергоснабжение'] = [n * 1000000, если isinstance (n, int) == True иначе n == str ('np. nan ') для n в энергии [' Energy Supply ']] ----> 5 энергии [' Energy Supply '] = [n.replace (to_replace =' False ', значение =' np.Nan ') для n в energy ['Energy Supply']] 6 return energy 7 answer_one ()

AttributeError: у объекта 'bool' нет атрибута 'replace'

Заранее спасибо, сообщество переполнения стека.

Ответы [ 3 ]

1 голос
/ 28 января 2020

ваш первый код не работает должным образом, b / c вы используете == после остальных

energy['Energy Supply'] = [n*1000000 if isinstance(n,int) == True else 'np.Nan' for n in energy['Energy Supply']]

Чтобы избавиться от False, вы можете использовать отображение

d={False:np.nan}
energy['Energy Supply']=energy['Energy Supply'].map(d)
0 голосов
/ 28 января 2020

Сначала вам не нужно проверять равенство n == np.nan, но вы должны инициализировать как n = np.nan. Поскольку инициализация в понимании списка не требует =, это можно сделать как energy['Energy Supply'] = [n * 1000000 if isinstance(n, int) == True else np.nan for n in energy['Energy Supply']]. Это решит вашу проблему.

0 голосов
/ 28 января 2020

Я не уверен, что правильно вас понимаю, но если так - это работает?

energy['Energy Supply'] = [n*1000000 if isinstance(n,int) == True else 'np.Nan' for n in energy['Energy Supply']]
...