如何修复ValueError:在Python中要解包的值太多(预期为3)?

yvt65v4c  于 2022-12-25  发布在  Python
关注(0)|答案(5)|浏览(150)

我有一个名为records的数据集,数据集示例如下所示:

user_id movie_id genre
1       1001     action
2       1002     drama
3       1003     comedy
4       1004     drama
...     ...      ...

我想用下面的方法迭代records

for user, movie, genre in records:
    print(user, movie, genre)

它首先打印一些行,然后显示以下错误:

44892 113769 comedy
44892 113769 drama
...  
------------------------------------------------ 
ValueError Traceback (most recent call last) in 
----> 1 for user, movie, genre in records:
      2     print(user, movie, genre)

ValueError: too many values to unpack (expected 3)

什么是错误的,如何解决它?

ldfqzlk8

ldfqzlk81#

变量名称不同:
您在数据集中将它们称为user_idmovie_idgenre,但随后将它们称为usermovie
尝试将其更改为:

for user_id, movie_id, genre in records:
    print(user_id, movie_id, genre)
pjngdqdw

pjngdqdw2#

我想把这个作为注解添加,但是我不能添加代码片段。因此添加作为答案

for item in records:
    print(item)
    user, movie, genre=item

您将通过ValueError在代码中断之前打印记录的值。
一旦您向我们显示了发生故障的记录,我们将更容易找到解决方案
注意:如果您想忽略与预期模式不匹配的记录,您可以

for item in records:
    try:
        user, movie, genre=item
    except ValueError:
        print("Failed at %s" % repr(item))
    else:
        print(item)
j5fpnvbx

j5fpnvbx3#

请检查您的数据集。可能有一些行的数据是由制表符分隔的,它将该行视为新列。因此,错误正在抛出。
示例:
用户标识电影标识类型
44892 113769恐怖喜剧
在这里,如果你选择了制表符/空格作为分隔符,那么它会将恐怖和喜剧视为不同的列。
或者您可以参考:"Too many values to unpack" Exception

ctehm74n

ctehm74n4#

您的数据集是否加载为Pandas Dataframe ?如果是,您可以执行以下操作

cols = ['user_id', 'movie_id', 'genre']
# Assuming df is the data frame you have
for ind in df.index:
  user_id, movie_id, genre = df.loc[ind, cols]
  print(user_id, movie_id, genre)

如果数据集中没有列名,那么自己添加列名可能是一个有效的步骤。

mw3dktmi

mw3dktmi5#

您可以使用此选项放弃返回的任何额外数据

for user, movie, genre,*_ in records:
    print(user, movie, genre)

相关问题