## How to Check list containing NaN

I think this makes sense because of your pulling `numpy`

into scope indirectly via the star import.

`>>> import numpy as np`

>>> [0.0,0.0]/0

Traceback (most recent call last):

File "<ipython-input-3-aae9e30b3430>", line 1, in <module>

[0.0,0.0]/0

TypeError: unsupported operand type(s) for /: 'list' and 'int'

>>> [0.0,0.0]/np.float64(0)

array([ nan, nan])

When you did

`from matplotlib.pylab import *`

it pulled in `numpy.sum`

:

`>>> from matplotlib.pylab import *`

>>> sum is np.sum

True

>>> [0.0,0.0]/sum([0.0, 0.0])

array([ nan, nan])

You can test that **this** `nan`

object (`nan`

isn't unique in general) is in a list via identity, but if you try it in an `array`

it seems to test via equality, and `nan != nan`

:

`>>> nan == nan`

False

>>> nan == nan, nan is nan

(False, True)

>>> nan in [nan]

True

>>> nan in np.array([nan])

False

You could use `np.isnan`

:

`>>> np.isnan([nan, nan])`

array([ True, True], dtype=bool)

>>> np.isnan([nan, nan]).any()

True

## Python check if all elements in a list are Nan

You need `all`

:

`np.isnan(op_list).all()`

# True

For a solution using lists you can do:

`all(i != i for i in op_list)`

# True

## how to check for np.nan in list comprehension?

Why are you comparing with `is`

? Different values may not necessarily be the same instance. This is true for ints as well as floats. (CPython's quirk for small integers is the only exception that I know of, and is strictly an implementation detail.)

`>>> import math`

>>> float('nan') is math.nan

False

You can use `np.isnan`

to check for nan, or the built-in `math.isnan`

, or check that the value is equal to itself.

`>>> np.isnan([12.6,np.nan,0.5,4.6])`

array([False, True, False, False], dtype=bool)

>>> [math.isnan(x) for x in [12.6,np.nan,0.5,4.6]]

[False, True, False, False]

>>> [x for x in [12.6,np.nan,0.5,4.6] if x == x]

[12.6, 0.5, 4.6]

## How to get list of strings from list-like string that includes nan?

What about:

`eval(z,{'nan':'nan'}) # if you can tolerate then: `

[i for i in eval(z,{'nan':'nan'}) if i != 'nan']

It may have security considerations.

## How can I get all the index of all the NaNs of a list?

If you're using NumPy, you should really start using arrays, and get out of the habit of manually looping at Python level. Manual loops are typically about 100 times slower than letting NumPy handle things, and lists of floats take about 4 times the memory of an array.

In this case, NumPy can give you an array of NaN indices quite simply:

`ind = numpy.where(numpy.isnan(a))[0]`

`numpy.isnan`

gives an array of booleans telling which elements of `a`

are NaN. `numpy.where`

gives an array of indices of `True`

elements, but wrapped in a 1-element tuple for consistency with the behavior on multidimensional arrays, so `[0]`

extracts the array from the tuple.

This works when `a`

is a list, but you should really use arrays.

Your attempt fails because NaN values aren't equal to each other or themselves:

`>>> numpy.nan == numpy.nan`

False

>>> numpy.nan == float('nan')

False

NaN was designed this way for algorithmic convenience, to make `x != x`

a simple check for NaN values in environments where producing a NaN to compare against is awkward, and because NaNs have a rarely-used *payload* component that may be different between different NaNs.

The other answer recommends an `is numpy.nan`

test, but this is buggy and unreliable. It only works if your NaNs happen to be the specific object `numpy.nan`

, which is rarely the case:

`>>> float('nan') is numpy.nan`

False

>>> numpy.float64(0)/0 is numpy.nan

__main__:1: RuntimeWarning: invalid value encountered in double_scalars

False

>>> numpy.array([numpy.nan])[0] is numpy.nan

False

Rely on `is numpy.nan`

checks, and they *will* bite you.

## flatten nested list in pandas containing nan

This should work for any nested lists

`from collections.abc import Iterable`

def flatten(l):

for el in l:

if isinstance(el, Iterable) and not isinstance(el, (str, bytes)):

yield from flatten(el)

else:

yield el

So recreating your df

`import pandas as pd`

df = pd.DataFrame([[[[float('nan')],[float('nan'), 'DE']]],

[[[float('nan'), ['IT', 'DE']]]],

[[[['FR']]]],

[[[['AE'], float('nan'), ['AE', 'MT'], ['MX']]]]],columns=['country'])

df['country'] = df['country'].apply(lambda x:list(set(flatten(x)))).apply(lambda x: [i for i in x if str(i) != 'nan'])

gives the following output

` country`

0 [DE]

1 [IT, DE]

2 [FR]

3 [AE, MT, MX]

## Retrieving the index of NaN in a list

Take advantage of the fact that NaN != NaN, mathematically, so you can pass a generator to `next`

to get the first index of NaN, or -1 if it doesn't exist.

`nan_idx = next((i for i, v in enumerate(li) if v != v), -1)`

`print(nan_idx) `

0

## How can I check for NaN values?

Use `math.isnan`

:

`>>> import math`

>>> x = float('nan')

>>> math.isnan(x)

True

### Related Topics

Spark Equivalent of If Then Else

Reduce Multi-Index/Multi-Level Dataframe to Single Index, Single Level

Pyspark - Sum a Column in Dataframe and Return Results as Int

How to Extract Hours and Minutes from a Datetime.Datetime Object

Check If a Specific Class and Value Exist in HTML Using Beautifulsoup Python

Python Get File Size of Volumes or Physical Drives

How to Get the Sum of a List of Numbers With Recursion

Add N Empty Rows in a Dataframe

How to Repeatedly Execute a Function Every X Seconds

Splitting a Phone Number into a List of Digits: Python

I Want to Reshape 2D Array into 3D Array

How to Get the Response Json Data from Network Call in Xhr Using Python Selenium Web Driver Chorme

How to Add Multiple Embed Images in an Email Using Python

How to Select Last Row and Also How to Access Pyspark Dataframe by Index

How to Detect and Remove Outliers from Each Column of Pandas Dataframe At One Go