Python Pandas: LabelEncoding соответствует неизвестным переменным

  • Привет, у меня есть фрейм данных, полный строк, и я хочу закодировать эти строки и сохранить их соответствующие коды.
  • Я хочу создать эти коды в одном столбце и разместить их в другом столбце.
  • Когда я помещаю эти коды в какой-то другой столбец, в котором есть строка, которую я не видел в моем обучающем столбце, я хочу создать для этого другое уникальное значение.
  • Я пробовал функцию 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

Как это сделать проще всего. Спасибо.

0
0
63
2

Ответы 2

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

df=pd.read_clipboard()

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

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

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

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 

На самом деле я не знаю e и f, я хочу назначить им код, как я вижу их в первый раз.

s900n 06.12.2018 15:29

@ s900n, извините, я не понял, не могли бы вы объяснить это подробнее здесь.

RavinderSingh13 07.12.2018 10:28

Вы можете кодировать себя с помощью 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())

Другие вопросы по теме