繁体   English   中英

错误:'应用函数时解包的值太多(预期为 2)

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

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

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

由于您没有显示乘客的确切格式,我无法给出如何解决它的确切答案,但这里有一个简短的示例向您展示错误发生的原因。

假设您有以下情况:

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() _单独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参数 - 它可能不会像您预期的那样运行( 是文档的链接)。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM