Error: 'too many values to unpack (expected 2) when applying a function

Error: 'too many values to unpack (expected 2) when applying a function

我创建了一个函数,当我将它应用到我的数据框时,它 returns 出错了。谁能帮我解决这个问题?

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)

这种错误是由于返回值的数量与您尝试将它们存储到的变量数量不匹配造成的。更确切地说,在您的情况下,返回值超过 2 但您试图将它们存储在两个变量 sibparch.

由于您没有显示 passenger 的确切格式,因此我无法给您确切的解决方法,但这里有一个简短的示例来说明为什么会发生错误。

假设您遇到以下情况:

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

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

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

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

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

也尝试使用 DataFrame.apply()axis 参数——它的行为可能不像您预期​​的那样(here's a link 文档)。

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

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