Python Pandas: LabelEncoding подгоняет неизвестные переменные - PullRequest
0 голосов
/ 06 декабря 2018
  • Привет! У меня есть массив данных, полный строк, и я хочу закодировать эти строки и сохранить их соответствующие коды.
  • Я хочу создать эти коды в одном столбце и разместить их в другом столбце.
  • Когда я подгоняю эти коды к другому столбцу, в котором есть строка, которую я не видел в своей обучающей колонкеЯ хочу создать еще одну уникальную ценность для этого.
  • Я пробовал функцию LabelEncoding, но она выдает ошибку в ранее невидимых строках.

Например, иметь фрейм данных:

 col1  col2
  a     a
  b     b
  c     e
  d     f

После обучения сначала LabelEncodingВ столбце я получаю что-то вроде этого:

 col1  col2
  1     a
  2     b
  3     e
  4     f

После подбора созданных кодов во втором столбце я хочу получить что-то вроде этого:

 col1  col2
  1     1
  2     2
  3     5
  4     6

Какой самый простой способ сделать это,Спасибо.

Ответы [ 2 ]

0 голосов
/ 06 декабря 2018

Вы можете кодировать себя, используя pd.factorize:

v, k = pd.factorize(sorted(df.stack().unique()))

m = dict(zip(k.tolist(), (v+1).tolist()))

df.replace(m)

Вывод:

   col1  col2
0     1     1
1     2     2
2     3     5
3     4     6

Я думаю, что реальный трюк состоит в том, чтобы сложить col1 и col2, а затем кодировать значения обоих списков.как один.

le = LabelEncoder()
le.fit(df.stack())
0 голосов
/ 06 декабря 2018

Создан df фрейм данных путем копирования образца из поста OP следующим образом.

df=pd.read_clipboard()

Его значение будет следующим при печати:

    col1    col2
0    a       a 
1    b       b 
2    c       e 
3    d       f 

Не могли бы вы попробоватьследующий.Я дал здесь только первые 6 алфавитов, которые вы могли бы упомянуть все, если они есть в вашем текущем файле ввода.

dict1 = {'a':1, 'b':2, 'c':3, 'd':4, 'e':5, 'f':6}
df.applymap(lambda s: dict1.get(s) if s in dict1 else s)

Вывод будет следующим:

   col1   col2
0   1      1 
1   2      2 
2   3      5 
3   4      6 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...