错误:应用函数时,要解析的值太多(预期为2)

2024-04-28 06:27:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我创建了一个函数,当我把它应用到我的数据帧时,它返回错误。有人能帮我吗?在

def accompany_alone(passenger):
    sib, parch = passenger 

    if sib >0:
        return 'With Family'
    elif parch >0:
        return 'With Family'
    else:
        return 'Alone'

titanic_df['Alone'] =titanic_df[['SibSp','Parch']].apply(accompany_alone)

Error Image

<a href=dataset"/>


Tags: 数据函数dfreturndef错误withfamily
3条回答

sib, parch = passenger假设passenger有两个元素,您试图将它们分配给sib和{}。错误是说需要两个元素(一个用于sib,一个用于parch),但是只提供了一个(passenger)。在

如果您试图在每一行中应用accompany_alone(),那么只需显式地迭代行索引可能会更容易,例如,这样做可以:

def accompany_alone(sib, arch):
  if sib > 0: return 'With Family'
  elif parch > 0: return 'With Family'
  else: return 'Alone'

titanic_df['Alone'] = [accompany_alone(titanic_df['SibSp'][idx], 
                                       titanic_df['Parch'][idx]) 
                       for idx in range(titanic_df.shape[0])]

另外,请尝试使用axis参数DataFrame.apply(),它的行为可能与您预期的不同(here's a link对于文档)。在

这种错误是由返回值的数量与试图将它们存储到的变量数量不匹配造成的。更确切地说,在您的例子中,返回的值大于2,但是您试图将它们存储在两个变量sib和{}。在

我不能给你一个确切的答案如何解决它,因为你没有显示旅客的确切格式,但这里有一个简短的例子来告诉你为什么会发生错误。在

假设您有以下情况:

a = (1,2,3)
c,b = a

这将引发您所面临的相同错误,因为a有3个值,但我们只使用2个变量来存储它们。要解决这个问题,我们可以:

^{pr2}$

现在每个值分别存储在1个变量中,没有错误。在

与其标记Family和not Family,不如将其存储为True或False, 你能做到的

titanicDatabase['family']=titanicDatabase['Parch'][np.array(titanicDatabase['Parch']>0)| np.array(titanicDatabase['SibSp']>0)]

相关问题 更多 >