¿Cómo puedo eliminar los valores np nan de una matriz de cadenas?

He creado una LISTA donde agrego valores que no están presentes en un DF basado en otro DF.

Por ejemplo:

NotPresent = [Alan, Susie, nan, nan, nan] 

Quiero poder convertir la lista así:

NotPresent = [Alan, Susie] 

¿Cuál es la forma más sencilla de abordar esto en Python?

Gracias

1
Techno04335 22 feb. 2018 a las 21:01

4 respuestas

La mejor respuesta

Si nan es = np.nan entonces:

import numpy as np
import math
NotPresent = ["Alan", "Susie", np.nan, np.nan, np.nan] 
print(NotPresent)
n = len(NotPresent)
j = -1
for i in range(n):
  j += 1
  if not isinstance(NotPresent[j], str) and math.isnan(NotPresent[j]):
    del NotPresent[j]
    j = j-1
print(NotPresent)

La salida será:

['Alan', 'Susie', nan, nan, nan]

['Alan', 'Susie']

Si "nan" es una cadena, entonces:

NotPresent = ["Alan", "Susie", "nan", "nan", "nan"] 
print(NotPresent)
n = len(NotPresent)
j = -1
for i in range(n):
    j += 1
    if NotPresent[j] == "nan":
        del NotPresent[j]
        j -= 1
print(NotPresent)

La salida será:

['Alan', 'Susie', "nan", "nan", "nan"]

['Alan', 'Susie']

1
Jai 22 feb. 2018 a las 18:18

IIUC

[x for x in NotPresent if str(x) != 'nan']
Out[1543]: ['Alan', 'Susie']
1
YOBEN_S 22 feb. 2018 a las 18:04

Si realmente quiere decir un pandas DataFrame, puede usar dropna()

>>> import pandas as pd
>>> import numpy as np
>>> data = [['Alan'], ['Suzie'], [np.nan], [np.nan]]
>>> df = pd.DataFrame(data, columns=['col1'])
>>> df
    col1
0   Alan
1  Suzie
2    NaN
3    NaN
>>> df.dropna()
    col1
0   Alan
1  Suzie

Otras personas han respondido con sus versiones de manejo nan en una lista. Aquí hay una forma alternativa de hacerlo usando nan de numpy

>>> sample
['Alan', 'Suzie', nan, nan]
>>> from numpy import nan
>>> [x for x in sample if x is not nan]
['Alan', 'Suzie']
3
Orenshi 22 feb. 2018 a las 18:52

Puedes hacerlo usando filter:

import numpy as np

NotPresent = ["Alan", "Susie", np.nan, np.nan, np.nan] 

NotPresent = list(filter(lambda i: not i is np.nan, NotPresent))

print(NotPresent)

Salida:

['Alan', 'Susie']
2
Vasilis G. 22 feb. 2018 a las 18:19