El valor de verdad de una serie es ambiguo en el dataframe.

Tengo el mismo código, bash crear un nuevo campo en el dataframe de pandas con condiciones simples:

if df_reader['email1_b']=='NaN': df_reader['email1_fin']=df_reader['email1_a'] else: df_reader['email1_fin']=df_reader['email1_b'] 

Pero veo este extraño error:

 ValueError Traceback (most recent call last)  in () ----> 1 if df_reader['email1_b']=='NaN': 2 df_reader['email1_fin']=df_reader['email1_a'] 3 else: 4 df_reader['email1_fin']=df_reader['email1_b'] /home/user/GL-env_py-gcc4.8.5/lib/python2.7/site-packages/pandas/core/generic.pyc in __nonzero__(self) 953 raise ValueError("The truth value of a {0} is ambiguous. " 954 "Use a.empty, a.bool(), a.item(), a.any() or a.all()." --> 955 .format(self.__class__.__name__)) 956 957 __bool__ = __nonzero__ ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all(). 

¿Alguien puede explicarme, lo que necesito con esto?

df_reader['email1_b']=='NaN' es un vector de valores booleanos (uno por fila), pero necesita un valor booleano para funcionar. Use esto en su lugar:

 df_reader['email1_fin'] = np.where(df_reader['email1_b']=='NaN', df_reader['email1_a'], df_reader['email1_b']) 

Como nota al margen, ¿estás seguro de 'NaN' ? ¿No es NaN ? En este último caso, tu expresión debe ser:

 df_reader['email1_fin'] = np.where(df_reader['email1_b'].isnull(), df_reader['email1_a'], df_reader['email1_b']) 

if espera que se devuelva un valor escalar, no comprende una matriz de valores booleanos, que es lo que devuelven sus condiciones. Si lo piensa, ¿qué debería hacer si un valor único en esta matriz es False / True ?

Para hacer esto correctamente puedes hacer lo siguiente:

 df_reader['email1_fin'] = np.where(df_reader['email1_b'] == 'NaN', df_reader['email1_a'], df_reader['email1_b'] ) 

También parece que estás comparando con el str 'NaN' lugar de con el NaN numérico. ¿Se pretende esto?