Как использовать DictVectorizer для преобразования категориального столбца - PullRequest
0 голосов
/ 10 июня 2018

У меня есть фрейм данных, некоторые столбцы которого (C1, C2, C3) являются категориальными (строковыми) переменными.Типы данных и данных следующие:

                 C1           C2           C3           C4           C5  \
4   b'02e197c5'  b'c2ced437'  b'a2427619'  b'3f85ecae'  b'b8c51ab7'
9   b'62770d79'  b'ad984203'  b'ddd956c1'  b'f7f54f97'  b'bbaea1c0'
13  b'7ffd46c3'  b'710103fd'  b'a1407382'  b'f2463ffb'  b'664ff944'
14  b'9a8cb066'  b'7a06385f'  b'417e6103'  b'6faef306'  b'f8990a45'
45  b'6f877ce8'  b'58cc2d25'  b'9b48ba97'  b'f2463ffb'  b'd90dd51f'

Тип данных:

C1        object

C2        object

C3        object

Затем я использовал DictVectorizer для применения горячего кода для строки

labelTransformer = DictVectorizer(dtype='str')
labelTransformer.fit_transform(clickDataFrame["C1"].astype("str"))

Но после этого я получаю сообщение об ошибке:

 File "click_main.py", line 60, in <module>
    df2 = labelTransformer.fit_transform(clickDataFrame["C1"].astype("str"))
  File "/usr/local/lib/python3.6/dist-packages/sklearn/feature_extraction/dict_vectorizer.py", line 230, in fit_transform
    return self._transform(X, fitting=True)
  File "/usr/local/lib/python3.6/dist-packages/sklearn/feature_extraction/dict_vectorizer.py", line 166, in _transform
    for f, v in six.iteritems(x):
  File "/usr/local/lib/python3.6/dist-packages/sklearn/externals/six.py", line 439, in iteritems
    return iter(getattr(d, _iteritems)(**kw))
AttributeError: 'str' object has no attribute 'items'

Я много пробовал, но не могу найти решение?

1 Ответ

0 голосов
/ 10 июня 2018

Вы можете получить горячее кодирование прямо из панд, используя pd.get_dummies.Если вы хотите обрабатывать каждый столбец независимо, вы можете просто сделать pd.get_dummies(df) или pd.get_dummies(df.C1).

Если вы хотите получить индикатор для каждого уникального значения во всех столбцах, вы можете использовать pd.get_dummies(df.stack()).unstack().swaplevel(0, 1, axis=1).

...