# Issue

*This Content is from Stack Overflow. Question asked by Brian Smith *

I have below `list`

```
import pandas as pd
import numpy as np
dat = pd.DataFrame({'name' : ['A', 'C', 'A', 'B', 'C'], 'val' : [1,2,1,2,4]})
List = [dat, np.nan, dat, np.nan, np.nan]
List
```

I want to retain only those elements where they are not `nan`

.

There is a similar discussion in How can I remove Nan from list Python/NumPy, but it is only applicable if all elements are scalar.

Is there any way to remove `nan`

if some elements are matrix/dataframe?

# Solution

The question has changed, so too has the answer:

Strings can’t be tested using `math.isnan`

as this expects a float argument. In your `countries`

list, you have floats and strings.

In your case the following should suffice:

```
cleanedList = [x for x in countries if str(x) != 'nan']
```

# Old answer

In your `countries`

list, the literal `'nan'`

is a string not the Python float `nan`

which is equivalent to:

```
float('NaN')
```

In your case the following should suffice:

```
cleanedList = [x for x in countries if x != 'nan']
```

This Question was asked in StackOverflow by user3001937 and Answered by user764357 It is licensed under the terms of CC BY-SA 2.5. - CC BY-SA 3.0. - CC BY-SA 4.0.