Skip to main content
 首页 » 编程设计

python之值错误 : y contains new labels: ['#' ]

2025年05月04日7jiqing9006

我有一个列表列表,每个列表包含 1 到 5 个标签。我构建了一个包含前 50 个标签的列表。我的目标是构建一个新的列表列表,其中每个列表仅包含前 50 个标签。我的方法是这样的:

首先,我构建了一个新的列表列表,其中只有前 50 个标签:

top_50 = list(np.array(pd.read_csv(os.path.join(dir,"Tags.csv")))[:,1]) 
train = pd.read_csv(os.path.join(dir,"Train.csv"),iterator = True) 
top_50 = top_50[:51] 
tags = list(np.array(train.get_chunk(50000))[:,3]) 
 
top_50_tags = [[tag for tag in list if tag in top_50] for list in tags] 

然后我尝试对标签进行编码:

    coder = preprocessing.LabelEncoder()   
    coder = coder.fit(top_50) 
    tags = [coder.transform(tag) for tag in list for list in top_50_tags] 

然而,这给了我这个错误:

Traceback (most recent call last): 
  File "C:\Users\Ano\workspace\final_submission\src\rf_test.py", line 69, in <module> 
    main() 
  File "C:\Users\Ano\workspace\final_submission\src\rf_test.py", line 33, in main 
    labels = [coder.transform(tag) for tag in list for list in top_50_tags] 
  File "C:\Python27\lib\site-packages\sklearn\preprocessing\label.py", line 120, in transform 
    raise ValueError("y contains new labels: %s" % str(diff)) 
ValueError: y contains new labels: ['#'] 

我认为出现此错误是因为我的一些列表是空的,因为其中没有前 50 个标签。但错误明确指出 ["#"] 是新看到的标签。我的假设是否正确?我应该如何处理错误消息?
编辑: 对于那些想知道为什么我在列表理解中使用列表作为变量的人,我实际上在我的实际程序中使用了不同的词作为变量。

更新

我检查了我的 top_50 和标签的差异:

print(len(top_50.difference(tags))) 

这给了我 0 的长度。这应该意味着我的空列表是问题所在?

请您参考如下方法:

也许你可以检查这个问题:https://github.com/scikit-learn/scikit-learn/issues/3123 在 scikit-learn 0.17 版本中,此错误已得到解决。