【问题标题】:one-hot encode : list of column_values has to encodeone-hot 编码:必须对 column_values 列表进行编码
【发布时间】:2018-05-22 19:56:47
【问题描述】:

我在列表中有一个 column_names,我想对 list 中的列中的值进行 One-Hot 编码。我想对数据集中的分类变量进行编码。我尝试了一些程序,但它抛出了一个错误

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')

它抛出的错误

Traceback(最近一次调用最后一次): 文件“preprocessing.py”,第 83 行,在 trainig_set_ed[col] = clfs[col].fit_transform(trainig_set_ed[col]) getitem 中的文件“/root/.local/lib/python2.7/site-packages/pandas/core/frame.py”,第 2139 行 返回 self._getitem_column(key) _getitem_column 中的文件“/root/.local/lib/python2.7/site-packages/pandas/core/frame.py”,第 2146 行 返回 self._get_item_cache(key) _get_item_cache 中的文件“/root/.local/lib/python2.7/site-packages/pandas/core/generic.py”,第 1842 行 值 = self._data.get(item) 文件“/root/.local/lib/python2.7/site-packages/pandas/core/internals.py”,第 3838 行,在 get loc = self.items.get_loc(item) 文件“/root/.local/lib/python2.7/site-packages/pandas/core/indexes/base.py”,第 2524 行,在 get_loc 返回 self._engine.get_loc(self._maybe_cast_indexer(key)) 文件“pandas/_libs/index.pyx”,第 117 行,在 pandas._libs.index.IndexEngine.get_loc 文件“pandas/_libs/index.pyx”,第 139 行,在 pandas._libs.index.IndexEngine.get_loc 文件“pandas/_libs/hashtable_class_helper.pxi”,第 1265 行,在 pandas._libs.hashtable.PyObjectHashTable.get_item 文件“pandas/_libs/hashtable_class_helper.pxi”,第 1273 行,在 pandas._libs.hashtable.PyObjectHashTable.get_item KeyError: 'cat_var_6'

谢谢!

【问题讨论】:

  • 错误是什么?你看过pandas.get_dummies()
  • 你想独立编码你的特征吗?请提供一个小的可重复数据集和您想要的数据集 - 这将有助于了解您想要实现的目标
  • 我想独立编码特征..
  • 看起来training_set_ed 实际上是str,而不是pandas 对象。你能分享你用来创建它的代码吗?
  • 好的,我会更新代码

标签: python pandas scikit-learn


【解决方案1】:

演示:

来源 DF:

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)

【讨论】:

  • @Madhi,很高兴它有帮助!如果有帮助,请考虑accepting 的答案 - 它还表明您的问题已得到解答
  • @Madhi,请打开一个新问题并在那里发布所有相应的详细信息 - 您的代码、完整的错误回溯和产生该错误的字典
  • 好的,我会更新这个问题......我的声誉非常低,所以我无法发布很多问题...... :)
猜你喜欢
  • 2018-01-29
  • 2017-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-29
  • 2017-06-21
  • 2021-04-14
  • 1970-01-01
相关资源
最近更新 更多