不过你可以轻松做到这一点,
df.apply(LabelEncoder().fit_transform)
EDIT2:
在scikit-learn 0.20中,推荐的方式是
OneHotEncoder().fit_transform(df)
因为 OneHotEncoder 现在支持字符串输入。
使用 ColumnTransformer 可以将 OneHotEncoder 仅应用于某些列。
EDIT:
由于这个原始答案是一年多前的,并且产生了很多赞成票(包括赏金),我可能应该进一步扩展它。
对于inverse_transform 和transform,你必须做一些修改。
from collections import defaultdict
d = defaultdict(LabelEncoder)
这样,您现在保留所有列LabelEncoder
作为字典。
# Encoding the variable
fit = df.apply(lambda x: d[x.name].fit_transform(x))
# Inverse the encoded
fit.apply(lambda x: d[x.name].inverse_transform(x))
# Using the dictionary to label future data
df.apply(lambda x: d[x.name].transform(x))
莫尔编辑:
使用 Neuraxle 的FlattenForEach https://www.neuraxle.org/stable/api/neuraxle.steps.loop.html#neuraxle.steps.loop.FlattenForEach步骤,也可以使用相同的方法来执行此操作LabelEncoder https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.LabelEncoder.html一次性处理所有扁平化数据:
FlattenForEach(LabelEncoder(), then_unflatten=True).fit_transform(df)
用于单独使用LabelEncoder
取决于您的数据列,或者如果只有某些数据列需要进行标签编码而不是其他数据列,则使用ColumnTransformer https://stackoverflow.com/a/60302366/2476920是一个允许对列选择和 LabelEncoder 实例进行更多控制的解决方案。