Próbuję wydrukować, jeśli na liście słowników znajduje się wartość nan, ale nie udało się.

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

Kod :

for x in data:
    if (x['A']== 2):
        print('two')
    elif (x['A']== np.nan)
        print('null')
    else:
        print('nothing')
3
pylearner 1 kwiecień 2020, 09:59

3 odpowiedzi

Najlepsza odpowiedź

Możesz uzyskać wartości ze słownika za pomocą dict.values, w tym przypadku możemy po prostu map tą metodą i sprawdzić, czy wartości any w zwróconym generatorze są nierówne, co oznacza, że są 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

Lub postępując zgodnie z logiką w swoim kodzie:

for x in data:
    if (x['A']== 2):
        print('two')
    elif (x['A']!= x['A']):
        print('null')
    else:
        print('nothing')
3
yatu 1 kwiecień 2020, 07:03

Zamiast tego użyj np.isnan():

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

Źródła:

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

3
Grand Phuba 1 kwiecień 2020, 07:04

Możesz użyć if (x['A'] is np.nan) zamiast ==

-1
Binh 1 kwiecień 2020, 07:06