![](/img/trans.png)
[英]ValueError: too many values to unpack (expected 2) error when changing a value
[英]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,但您试图将它们仅存储在两个变量sib
和parch
。
由于您没有显示乘客的确切格式,我无法给出如何解决它的确切答案,但这里有一个简短的示例向您展示错误发生的原因。
假设您有以下情况:
a = (1,2,3)
c,b = a
这将抛出您面临的相同错误,因为 a 有 3 个值,但我们仅使用 2 个变量来存储它们。 为了解决这个问题,我们可以这样做:
a = (1,2,3)
c,b,e = a
现在每个值分别存储在 1 个变量中,没有错误。
sib, parch = passenger
假定passenger
有两个元素,您正试图将它们分配给sib
和parch
。 错误是说需要两个元素(一个用于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])]
而不是标签家庭而不是家庭,最好将其存储为 True 或 False,您可以这样做,
titanicDatabase['family']=titanicDatabase['Parch'][np.array(titanicDatabase['Parch']>0)| np.array(titanicDatabase['SibSp']>0)]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.