系列的真值在数据框中不明确

4 python python-2.7 pandas

我有相同的代码,我正在尝试使用简单的条件在 Pandas 数据框中创建新字段:

if df_reader['email1_b']=='NaN':
    df_reader['email1_fin']=df_reader['email1_a']
else:
    df_reader['email1_fin']=df_reader['email1_b']
Run Code Online (Sandbox Code Playgroud)

但我看到了这个奇怪的错误:

ValueError                                Traceback (most recent call last)
<ipython-input-92-46d604271768> in <module>()
----> 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().
Run Code Online (Sandbox Code Playgroud)

任何人都可以解释我,我需要什么?

DYZ*_*DYZ 5

df_reader['email1_b']=='NaN'是一个布尔值向量(每行一个),但您需要一个布尔值if才能工作。改用这个:

df_reader['email1_fin'] = np.where(df_reader['email1_b']=='NaN', 
                                   df_reader['email1_a'],
                                   df_reader['email1_b'])
Run Code Online (Sandbox Code Playgroud)

作为旁注,你确定'NaN'吗?不是NaN吗?在后一种情况下,您的表达式应该是:

df_reader['email1_fin'] = np.where(df_reader['email1_b'].isnull(), 
                                   df_reader['email1_a'],
                                   df_reader['email1_b'])
Run Code Online (Sandbox Code Playgroud)