Значения Nan в списке словарей - PullRequest
3 голосов
/ 01 апреля 2020

Am Попытка печати, если в списке словарей есть значение nan, но это не удалось.

data = [{'A' : 2, 'B' : 'ssss'}, {'A' : 3, 'B' : 'xxx'}, {'A' :nan, 'B' : 'ssss'}]

Код:

for x in data:
    if (x['A']== 2):
        print('two')
    elif (x['A']== np.nan)
        print('null')
    else:
        print('nothing')

Ответы [ 3 ]

3 голосов
/ 01 апреля 2020

Вы можете получить значения словаря, используя dict.values, в этом случае мы можем просто map с помощью этого метода и проверить, не равны ли значения any в возвращенном генераторе самим себе, что означает, что они NaN :

from itertools import chain
data = [{'A' : 2, 'B' : 'ssss'}, {'A' : 3, 'B' : 'xxx'}, 
        {'A' :float('nan'), 'B' : 'ssss'}]

any(i!=i for i in chain.from_iterable(map(dict.values, data)))
# True

Или следуя логике c в вашем коде:

for x in data:
    if (x['A']== 2):
        print('two')
    elif (x['A']!= x['A']):
        print('null')
    else:
        print('nothing')
3 голосов
/ 01 апреля 2020

Используйте np.isnan() вместо:

for x in data:
    if (x['A']== 2):
        print('two')
    elif (np.isnan(x['A']))
        print('null')
    else:
        print('nothing')

Источники:

https://docs.scipy.org/doc/numpy-1.13.0/user/misc.html https://docs.scipy.org/doc/numpy/reference/generated/numpy.isnan.html

0 голосов
/ 01 апреля 2020

Вы можете использовать if (x['A'] is np.nan) вместо ==

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...