错误:应用函数时,太多值无法解包(预期2)

时间:2018-10-27 02:16:30

标签: python kaggle

我创建了一个函数,当我将其应用于数据框时,它会返回错误。有人可以帮我吗?

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

Dataset

3 个答案:

答案 0 :(得分:0)

这种错误是由于返回值的数量与要将它们存储到其中的变量的数量不匹配引起的。更确切地说,在您的情况下,返回的值大于2,但是您试图将它们存储在仅两个变量sibparch中。

由于您没有显示确切的乘客格式,因此我无法为您提供确切的解决方法,但这是一个简短的示例,向您显示错误发生的原因。

想象一下您有以下情况:

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

这将引发与您同样的错误,因为a具有3个值,但是我们仅使用2个变量来存储它们。为了解决这个问题,我们可以做:

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

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

答案 1 :(得分:0)

sib, parch = passenger行假定passenger有两个元素,您正试图将它们分配给sibparch。该错误表明需要两个元素(一个元素用于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的{​​{1}}参数-可能行为不理想(文档here's a link)。

答案 2 :(得分:0)

最好将其存储为True或False,而不是标签Family,而不是family, 您可以这样做,

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