【问题标题】:The truth value of a Series is ambiguous in dataframeSeries 的真值在 dataframe 中不明确
【发布时间】:2017-08-22 07:37:53
【问题描述】:

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

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

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

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().

谁能解释一下,我需要做什么?

【问题讨论】:

    标签: python python-2.7 pandas


    【解决方案1】:

    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'])
    

    顺便说一句,您确定'NaN' 吗?不是NaN吗?在后一种情况下,您的表达式应该是:

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

    【讨论】:

    • 是的,你完全正确。第二个代码块解决了我的错误。谢谢!
    【解决方案2】:

    if 期望返回一个标量值,它不理解您的条件返回的布尔数组。如果你考虑一下如果这个数组中的单个值是False/True应该怎么办?

    要正确执行此操作,您可以执行以下操作:

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

    您似乎也在比较 str 'NaN' 而不是数字 NaN 这是故意的吗?

    【讨论】:

      猜你喜欢
      • 2017-03-27
      • 1970-01-01
      • 2023-01-08
      • 1970-01-01
      • 2021-07-09
      • 2019-12-19
      • 1970-01-01
      • 1970-01-01
      • 2021-11-20
      相关资源
      最近更新 更多