数据框:ValueError:系列的真值不明确

时间:2020-05-31 16:04:40

标签: python dataframe if-statement

我不确定为什么在这种简单的if条件下会收到这个奇怪的错误。 我添加了功能funt,以检查“所有者”列的每一行中的值, 首先,我要检查“所有者”列中的行是否具有以下任何值[ 'hal','jula','huli'],如果是,则应返回'cont'。 此返回值将用于在数据帧df中创建新的列(团队)。 每当我尝试在代码下运行时,都会出现此错误。

def funt(row):
  if df['Owner'] in ['hal','jula','huli']:   # error line
     return 'cont'
  elif df['Owner'] == "assigned":
     return "unassigned"
  elif df['Owner'] == "Other":
     return "Other"
  else:
     return "Something else"

df['team'] = df.apply(lambda row: funt(row), axis=1)

错误:

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

1 个答案:

答案 0 :(得分:1)

嗯,我假设您要对照if语句中的列表检查行项目“所有者”的值?您是否愿意写

if row['Owner'] in ['hal', 'jula', 'huli']:

看起来行对象正在传递到函数中?另一方面,df ['Owner']会尝试对照列表检查整个数据框的Owner列,因此会导致多种True / False可能性。因此,“模棱两可”。

或者,您可以像这样,而不是首先使用类似的功能:

mappings = {"assigned": "unassigned", "other": "Other"}
df.loc[:, 'Columns1'] = [mappings[value.lower()] if value.lower() in ["assigned", "other"] else "Something else" for value in df.loc[:, 'Owner']]