LabelEncoder和zip python的问题
我有一组列表,每个列表包含属于多个类的字符串实例。我希望将它们编码成数字类,用于培训LSTM。我尝试的是:LabelEncoder和zip python的问题,python,string,python-3.x,list,scikit-learn,Python,String,Python 3.x,List,Scikit Learn,我有一组列表,每个列表包含属于多个类的字符串实例。我希望将它们编码成数字类,用于培训LSTM。我尝试的是: from sklearn.preprocessing import LabelEncoder enc1 = LabelEncoder() enc2 = LabelEncoder() enc3 = LabelEncoder() encoders = [enc1, enc2, enc3] labels = [y1, y2, y3] for i,j in zip(encoders, labe
from sklearn.preprocessing import LabelEncoder
enc1 = LabelEncoder()
enc2 = LabelEncoder()
enc3 = LabelEncoder()
encoders = [enc1, enc2, enc3]
labels = [y1, y2, y3]
for i,j in zip(encoders, labels):
j = i.fit_transform(j)
但是,当我尝试时,所有列表的输出仍然是相同的字符串类:
print(format(Counter(y2)))
# Out: Counter({'m': 125585, 'f': 52589})
只有单独编码时,LabelEncoder
才能工作,显示整数类:
y2 = enc2.fit_transform(y2)
print(format(Counter(y2)))
# Out: Counter({1: 52589, 0: 125585})
zip
方法会有什么问题?更干净、更具Python风格的解决方案是列表理解:
。。。这将避免在循环中重复使用
j
时出现错误。如果将label\u编码器的输出分配给临时循环变量j
,它将不会反映在实际列表中。您需要明确地替换列表中的元素,或者最好创建一个新列表。
transformed = [i.fit_transform(j) for i, j in zip(encoders, labels)]