Saltar al contenido

Función Pandas Lambda con soporte Nan

Pudiera darse el caso de que halles algún problema en tu código o proyecto, recuerda probar siempre en un ambiente de testing antes aplicar el código al trabajo final.

Solución:

Necesitas pandas.isnull para comprobar si el escalar es NaN:

df = pd.DataFrame( 'Col1' : [1,2,3,np.NaN],
                 'Col2' : [8,9,7,10])  

df2 = df.apply(lambda x: x['Col2'] if pd.isnull(x['Col1']) else x['Col1'], axis=1)

print (df)
   Col1  Col2
0   1.0     8
1   2.0     9
2   3.0     7
3   NaN    10

print (df2)
0     1.0
1     2.0
2     3.0
3    10.0
dtype: float64

Pero mejor es usar Series.combine_first:

df['Col1'] = df['Col1'].combine_first(df['Col2'])

print (df)
   Col1  Col2
0   1.0     8
1   2.0     9
2   3.0     7
3  10.0    10

Otra solución con Series.update:

df['Col1'].update(df['Col2'])
print (df)
   Col1  Col2
0   8.0     8
1   9.0     9
2   7.0     7
3  10.0    10

Suponiendo que tiene una segunda columna, es decir:

df = pd.DataFrame( 'Col1' : [1,2,3,np.NaN], 'Col2': [1,2,3,4])

La solución correcta a este problema sería:

df['Col1'].fillna(df['Col2'], inplace=True)

Dentro de pandas 0.24.2, uso

df.apply(lambda x: x['col_name'] if x[col1] is np.nan else expressions_another, axis=1)

porque pd.isnull() no funciona.

en mi trabajo, encontré el siguiente fenómeno,

Sin resultados en ejecución:

df['prop'] = df.apply(lambda x: (x['buynumpday'] / x['cnumpday']) if pd.isnull(x['cnumpday']) else np.nan, axis=1)

Los resultados existen:

df['prop'] = df.apply(lambda x: (x['buynumpday'] / x['cnumpday']) if x['cnumpday'] is not np.nan else np.nan, axis=1)

Aquí puedes ver las comentarios y valoraciones de los usuarios

Eres capaz de asistir nuestra ocupación mostrando un comentario o dejando una valoración te damos la bienvenida.

¡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 *