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

一热编码:必须编码的column_values列表

山煜祺
2023-03-14

我在列表中有一个列名称,我想对列表中的列中的值进行热编码。我想从数据集中对分类变量进行编码。我尝试了几个过程,但它给我带来了一个错误

from sklearn import preprocessing
#training_set_ed is where my .csv file is stored
edited_training_set = 'edited_dataset/test_set.csv'
trainig_set_ed = pd.read_csv(edited_training_set)

column_header = ['cat_var_1','cat_var_2','cat_var_3','cat_var_4','cat_var_5','cat_var_6',
        'cat_var_7','cat_var_8','cat_var_9','cat_var_10','cat_var_11','cat_var_12','cat_var_13',
        'cat_var_14','cat_var_15','cat_var_16','cat_var_17','cat_var_18']
clfs = {c:LabelEncoder() for c in column_header}

for col,clf in clfs.items():

      trainig_set_ed[col] = clfs[col].fit_transform(trainig_set_ed[col])

trainig_set_ed.to_csv('edited_dataset/train_set_encode.csv',sep='\t',encoding='utf-8')

它抛出的错误

回溯(最后一次调用):文件“preprocessing.py”,第83行,trainig_set_ed[col]=clfs[col].fit_transform(trainig_set_ed[col])文件“/root/.local/lib/python2.7/site packages/pandas/core/frame.py”,第2139行,在getitem return self中,在第1842行,在第3838行get loc=self.items.get loc(item)文件中的第3838行,返回self.\u getitem\u cache(key)文件“/root/.local/lib/python2.7/site packages/pands/core/generic.py”“/root/.local/lib/python2.7/site packages/pandas/core/index/base.py”,第2524行,在get_loc返回self.\u engine.get_loc(self.\u maybe_cast_indexer(key))文件“pandas/_libs/index.pyx”,第117行,在pandas.\u libs.index.IndexEngine.get_loc文件“pandas/_libs/index.pyx”,第139行,在pandas.\u libs.index.IndexEnginepandas/_libs/hashtable_class_helper.pxi”,第1265行,在pandas中。_libs.hashtable.PyObjectHashTable.get_项目文件“pandas/_libs/hashtable_class_helper.pxi”,第1273行,在pandas中。_libs.hashtable.PyObjectHashTable.get_项目键错误:“cat_var_6”

谢谢

共有1个答案

南门飞扬
2023-03-14

演示:

资料来源:

In [93]: df
Out[93]:
     a    b    c
0  aaa  xxx  ddd
1  bbb  zzz  bbb
2  ccc  aaa  aaa

解决方案:

In [94]: from sklearn.preprocessing import LabelEncoder
    ...:
    ...: cols = ['a','b','c']
    ...: clfs = {c:LabelEncoder() for c in cols}
    ...:

In [95]: for col, clf in clfs.items():
    ...:     df[col] = clfs[col].fit_transform(df[col])
    ...:

In [96]: df
Out[96]:
   a  b  c
0  0  1  2
1  1  2  1
2  2  0  0

变换

In [97]: clfs['a'].inverse_transform(df['a'])
Out[97]: array(['aaa', 'bbb', 'ccc'], dtype=object)

In [98]: clfs['b'].inverse_transform(df['b'])
Out[98]: array(['xxx', 'zzz', 'aaa'], dtype=object)

In [99]: clfs['c'].inverse_transform(df['c'])
Out[99]: array(['ddd', 'bbb', 'aaa'], dtype=object)
 类似资料:
  • 我试图在Iris数据集中的目标列(“物种”)上使用一个热编码器。 但我得到了以下错误: ValueError:预期的2D数组,得到1D数组代替: 使用数组或数组重塑数据的形状。如果数据具有单个要素或阵列,则重塑(-1,1)。如果(1,-1)包含单个样本,则重塑其形状。 我在谷歌上搜索了这个问题,发现大多数scikit学习估计器都需要2D数组,而不是一维数组。 同时,我还发现,我们可以尝试传递带有索

  • 我试图连接到使用下面的命令和获取错误。 FailedToParse:密码必须为mongoDB://URL:mongodb://user:user@123@localhost:27017/my-employees?authSource=admin尝试mongo--help获取更多信息 URL=

  • 如果我们不确定分类特征的性质,比如它们是名词性的还是序数的,我们应该使用哪种编码?顺序编码还是一个热编码?关于这个话题有没有明确的规定? 我看到很多人对没有方向的分类数据使用顺序编码。假设一个频率表: 有很多人更喜欢在这个专栏上做顺序编码。我非常想用一热编码。我对此的看法是,做序数编码会给这些颜色分配一些有序的数字,这意味着一个排名。而且没有排名第一。换句话说,我的模型不应该认为color_whi

  • 问题内容: 张量流是否具有类似于scikit Learn的一种用于处理分类数据的热编码器?使用tf.string的占位符会表现为分类数据吗? 我意识到我可以在将数据发送到tensorflow之前对其进行手动预处理,但是将其内置非常方便。 问题答案: 从TensorFlow 0.8开始,现在有一个原生的一站式操作,可以将一组稀疏标签转换为密集的一站式表示形式。这是的补充,在某些情况下,您可以使您直接

  • 问题内容: 如果输入为零,我想制作一个看起来像这样的数组: 如果输入为5: 对于以上内容,我写道: 但它没有用。 有什么方法可以在一线实现? 问题答案: 通常,当您想在机器学习中使用单编码进行分类时,就会有一组索引。 在现在 使用可以确保您使用正确的标签格式(也可能使用)。该值是一个特殊值,表示“将所有剩余的物料放入此维”。因为只有一个,所以它使阵列变平。 复制粘贴解决方案 包 您可以使用mpu.

  • 我正在使用pandas将csv数据读入python脚本。两个csv文件具有相同的编码(Windows-1252)。但是,对于其中一个文件,我在使用pandas读取csv文件时出错,除非我在pd中指定了编码参数。读取\u csv()。 有人知道为什么我需要在一个csv中指定编码,而不是在另一个csv中指定编码吗?两个csv都包含相似的数据(字符串和数字)。 非常感谢。