LabelEncoder和zip python的问题

时间:2018-04-12 06:34:03

标签: python string python-3.x list scikit-learn

我有一堆列表y1,y2..yn,每个列表包含属于多个类的字符串实例。我希望将它们编码为用于训练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, 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方法可能会出现什么问题?

1 个答案:

答案 0 :(得分:1)

更清洁,更智能的解决方案是列表理解

transformed = [i.fit_transform(j) for i, j in zip(encoders, labels)]

...这样可以避免在循环中重复j的错误。