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 NaN
s. 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 🙂
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)