一种具有多种类别的热编码

时间:2019-10-11 04:38:24

标签: python pandas one-hot-encoding

我有一个分类数据集,我试图将其转换为数字格式。我确实尝试了通用的一种热编码,但是它导致了巨大的规模。因此,我将编码限制为每个参数的前8个类别。

因此,我在每一列中进行循环。但是我在data_prep_text.i.value_counts遇到错误。

for i in data_prep_text.columns:
    if len(data_prep_text[i].unique())>7:
        top8=[j for j in data_prep_text.i.value_counts(ascending=False.head(8)).index]
        for label in top8:
            data_prep_text[label]=np.where(data_prep_text[i]==label,1,0)
    else:
        data_prep_text[i]=0

这是我面临的错误:

AttributeError                            Traceback (most recent call last)
<ipython-input-56-e25949bef086> in <module>
      1 for i in data_prep_text.columns:
      2     if len(data_prep_text[i].unique())>7:
----> 3         top8=[j for j in data_prep_text.i.value_counts(ascending=False.head(8)).index]
      4         for label in top8:
      5             data_prep_text[label]=np.where(data_prep_text[i]==label,1,0)

~/anaconda3_501/lib/python3.6/site-packages/pandas/core/generic.py in __getattr__(self, name)
   4374             if self._info_axis._can_hold_identifiers_and_holds_name(name):
   4375                 return self[name]
-> 4376             return object.__getattribute__(self, name)
   4377 
   4378     def __setattr__(self, name, value):

AttributeError: 'DataFrame' object has no attribute 'i'

'''

如果我正在使用“邻居”。 该代码没有使我有价值,而使它像data_prep_text.Neighborhood.value_counts。

1 个答案:

答案 0 :(得分:0)

您应该使用方括号表示法来避免此问题,并删除head方法,并通过切片取前8个值来替换它。

top8=[j for j in data_prep_text[i].value_counts(ascending=False)[:8].index]

当您执行data_prep_text.i时,它等效于data_prep_text['i']