当前位置: 首页 > 知识库问答 >
问题:

Scikit中跨多列的标签编码-学习

杨征
2023-03-14

我正在尝试使用Scikit-Learn的LabelEncoder来编码字符串标签的pandasDataFrame。由于dataframe有许多(50+)列,我希望避免为每个列创建LabelEncoder对象;我宁愿只有一个大的LabelEncoder对象,它可以跨我的所有数据列工作。

将整个DataFrame抛入LabelEncoder会产生以下错误。请记住,我在这里使用的是虚拟数据;实际上,我正在处理大约50列字符串标记的数据,因此需要一个不引用任何列名称的解决方案

import pandas
from sklearn import preprocessing 

df = pandas.DataFrame({
    'pets': ['cat', 'dog', 'cat', 'monkey', 'dog', 'dog'], 
    'owner': ['Champ', 'Ron', 'Brick', 'Champ', 'Veronica', 'Ron'], 
    'location': ['San_Diego', 'New_York', 'New_York', 'San_Diego', 'San_Diego', 
                 'New_York']
})

le = preprocessing.LabelEncoder()

le.fit(df)

回溯(最近一次调用):文件“”,第1行,在文件“/users/bbalin/anaconda/lib/python2.7/site-packages/sklearn/preprocessing/label.py”中,第103行,在fit y=column_or_1d(y,warn=true)文件“/users/bbalin/anaconda/lib/python2.7/site-packages/sklearn/utils/validation.py”,第306行,在column_or_1d中提高ValueError(“错误的输入形状{0}”。format(shape)):错误的输入形状(6,3)

对如何绕过这个问题有什么想法吗?

共有1个答案

冯鸿光
2023-03-14

不过,您可以很容易地做到这一点,

df.apply(LabelEncoder().fit_transform)

编辑2:

在scikit-learn 0.20中,推荐的方法是

OneHotEncoder().fit_transform(df)
from collections import defaultdict
d = defaultdict(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的Flatenforeach步骤,也可以同时对所有扁平化的数据使用相同的LabelEncoder:

FlattenForEach(LabelEncoder(), then_unflatten=True).fit_transform(df)

对于根据数据列使用单独的LabelEncoder,或者如果只需要对某些数据列进行标签编码,而不需要对其他数据列进行标签编码,则使用ColumnTransformer是一种允许对列选择和LabelEncoder实例进行更多控制的解决方案。

 类似资料:
  • 问题内容: 我正在尝试使用来编码一大串字符串标签。由于数据框有许多(50+)列,因此我想避免为每一列创建一个对象。我宁愿只有一个可以在我所有数据列中使用的大对象。 将整个数据投入会产生以下错误。请记住,我在这里使用伪数据。实际上,我正在处理大约50列的字符串标记数据,因此需要一种不按名称引用任何列的解决方案。 追溯(最近一次通话最近):文件中的行1,在第y行中= 中的第306行文件引发(“错误的输

  • 我的目标是通过传入我想要共享分类值的列,使其输出如下所示:

  • 我有一个数据集,它包含多个列,这些列的值是字符串格式的。现在我需要使用labelEncoder将这些文本列转换为数值。在下面的例子中,y是我的tain数据集的目标,A0到A13是不同的特征。还有50个特性,但我在这里提供了一个子集。现在,我如何将labelencoder应用于从A0到A8的数据集,并为创建模型创建一个新的编码数据帧?我知道我们可以像下面这样做,但这会说只编码一列。我希望编码器应用于

  • 问题内容: scikit学习的快速SVM问题。训练SVM时,就像 有什么办法可以成为非数字类型的列表?例如,如果我想将向量分类为“猫”或“狗”,而不必使用某种外部查找表将“猫”和“狗”编码为1和2。当我尝试仅传递字符串列表时,我得到… 因此,看起来像只是推弦乐不起作用。有任何想法吗? 问题答案: sklearn的最新版本能够使用字符串作为标签。例如:

  • 我一直在寻找通过python文档和论坛来选择列的方法,但是关于列索引的每个示例都过于简单。 假设我有一个10x10的数据帧 到目前为止,给出的所有文档只是一个简单的索引示例,如

  • 问题内容: 我一直在寻找通过python文档和论坛选择列的方法,但是索引列的每个示例都过于简单。 假设我有一个10 x 10的数据帧 到目前为止,所有文档都提供了一个简单的索引编制示例,例如 要么 但是当我尝试索引多个非连续列时出现错误 如果要选择A到C,E和G到我列,如何在Pandas中建立索引?看来这种逻辑将不起作用 我觉得解决方案非常简单,但是我无法解决此错误。谢谢! 问题答案: 基于名称或