Saltar al contenido

Python pandas aplica la función si el valor de una columna no es NULL

Solución:

El problema es ese pd.notnull(['foo', 'bar']) opera elementwise y devuelve array([ True, True], dtype=bool). Su condición if intenta convertir eso en un booleano, y ahí es cuando obtiene la excepción.

Para solucionarlo, simplemente puede envolver la declaración isnull con np.all:

df[['A','C']].apply(lambda x: my_func(x) if(np.all(pd.notnull(x[1]))) else x, axis = 1)

Ahora verás eso np.all(pd.notnull(['foo', 'bar'])) es de hecho True.

Tenía una columna que contenía listas y NaNs. Entonces, el siguiente funcionó para mí.

df.C.map(lambda x: my_func(x) if type(x) == list else x)

También otra forma es simplemente usar row.notnull().all() (sin numpy), Aquí hay un ejemplo:

df.apply(lambda row: func1(row) if row.notnull().all() else func2(row), axis=1)

Aquí hay un ejemplo completo en su df:

>>> d = {'A': [None, 2, 3, 4], 'B': [11, None, 33, 4], 'C': [None, ['a','b'], None, 4]}
>>> df = pd.DataFrame(d)
>>> df
     A     B       C
0  NaN  11.0    None
1  2.0   NaN  [a, b]
2  3.0  33.0    None
3  4.0   4.0       4
>>> def func1(r):
...     return 'No'
...
>>> def func2(r):
...     return 'Yes'
...
>>> df.apply(lambda row: func1(row) if row.notnull().all() else func2(row), axis=1)
0    Yes
1    Yes
2    Yes
3     No

Y una captura de pantalla más amigable 🙂

ingrese la descripción de la imagen aquí

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *