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)