Хобрук: Ваш путь к мастерству в программировании

Совместное использование кодировщика меток в нескольких столбцах

Я пытаюсь найти элегантный способ пометить кодирование нескольких столбцов в кадре данных Pandas с одним и тем же кодировщиком. Предположим, у меня есть два столбца, которые соответствуют командам из двух видов спорта, играющим в матче.

Решение, которое работает для меня, состоит в том, чтобы взять эти два столбца, преобразовать их в массив numpy, сгладить их, закодировать, а затем разгладить и вставить обратно в фрейм данных. Однако это кажется более сложным, чем должно быть, особенно при использовании комбинации pandas+scikitlearn.

.

Буду рад всем решениям, заранее спасибо!

P.S. Я хочу что-то похожее на тот же общий кодировщик для столбцов, но я не хочу устанавливать внешнюю библиотеку только для этого .

РЕДАКТИРОВАТЬ ОБНОВЛЕНИЕ: я пробовал этот пример, предложенный Бен Райнигер, но это не то, чего я хочу. Более конкретно:

import pandas as pd
from sklearn.preprocessing import OrdinalEncoder
data = pd.DataFrame({'Name':['Tom', 'Jack', 'Steve', 'Ricky'],
'Name1':['Mary','Tom', 'Ricky', 'Steve'],})

oe = OrdinalEncoder()

t_data = oe.fit_transform(data)

В результате я получаю следующее:

[[3. 0.]
 [0. 3.]
 [2. 1.]
 [1. 2.]]

Для данных:

<table border="1" class="dataframe">\n  <thead>\n    <tr style="text-align: right;">\n      <th></th>\n      <th>Name</th>\n      <th>Name1</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>Tom</td>\n      <td>Mary</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>Jack</td>\n      <td>Tom</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>Steve</td>\n      <td>Ricky</td>\n    </tr>\n    <tr>\n      <th>3</th>\n      <td>Ricky</td>\n      <td>Steve</td>\n    </tr>\n  </tbody>\n</table>'

Итак, как вы можете видеть, Джек и Мэри закодированы как число - 0.0. Это означает, что кодировщик берет все столбцы по отдельности.

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

Jack - 0 
Mary - 1 
Ricky - 2 
Steve - 3 
Tom - 4

Хотя Джек встречается только в первом столбце, а Мэри во втором.

Результирующий массив должен выглядеть следующим образом:

[[4. 1.]
 [0. 4.]
 [3. 2.]
 [2. 3.]]

В идеале он должен оставаться pandas dataframe.

РЕДАКТИРОВАТЬ ОБНОВЛЕНИЕ 2: мой текущий код, который работает для меня, и я хочу его оптимизировать, выглядит следующим образом:

# data is Pandas dataframe
data = data.to_numpy()
X = data[:, [3, 4]] # I choose the columns that I want to encode
X = X.flatten()
label_encoder = LabelEncoder()
X = label_encoder.fit_transform(X)
data[:, [3, 4]] = np.reshape(X, (-1, 2))
data = pd.DataFrame(data=data, columns=names)


Ответы:


1

Вам нужно подогнать LabelEncoder к набору уникальных значений, которые вы можете найти, найдя уникальные значения каждого столбца и соединив их:

name_uniques = data.Name.unique()
name1_uniques = data.Name1.unique()

uniques = np.unique(np.concatenate((name_uniques,name1_uniques),0))

Затем вы можете установить свой кодировщик на уникальные и преобразовать свои данные:

label_encoder = LabelEncoder()
label_encoder.fit(uniques)

data.Name = label_encoder.transform(data.Name)
data.Name1 = label_encoder.transform(data.Name1)

Обратите внимание, что если это на самом деле спортивные команды, этот метод, скорее всего, не даст вам хороших результатов, потому что кодирование меток придает значениям порядковый номер там, где его нет.

28.09.2020
Новые материалы

Освоение информационного поиска: создание интеллектуальных поисковых систем (глава 1)
Глава 1. Поиск по ключевым словам: основы информационного поиска Справочная глава: «Оценка моделей поиска информации: подробное руководство по показателям производительности » Глава 1: «Поиск..

Фишинг — Упаковано и зашифровано
Будучи старшим ИТ-специалистом в небольшой фирме, я могу делать много разных вещей. Одна из этих вещей: специалист по кибербезопасности. Мне нравится это делать, потому что в настоящее время я..

ВЫ РЕГРЕСС ЭТО?
Чтобы понять, когда использовать регрессионный анализ, мы должны сначала понять, что именно он делает. Вот простой ответ, который появляется, когда вы используете Google: Регрессионный..

Не зря же это называют интеллектом
Стек — C#, Oracle Опыт — 4 года Работа — Разведывательный корпус Мне пора служить Может быть, я немного приукрашиваю себя, но там, где я живу, есть обязательная военная служба на 3..

LeetCode Проблема 41. Первый пропущенный положительный результат
LeetCode Проблема 41. Первый пропущенный положительный результат Учитывая несортированный массив целых чисел, найдите наименьшее пропущенное положительное целое число. Пример 1: Input:..

Расистский и сексистский робот, обученный в Интернете
Его ИИ основан на предвзятых данных, которые создают предрассудки. Он словно переходит из одного эпизода в другой из серии Черное зеркало , а вместо этого представляет собой хронику..

Управление состоянием в микрофронтендах
Стратегии бесперебойного сотрудничества Микро-фронтенды — это быстро растущая тенденция в сфере фронтенда, гарантирующая, что удовольствие не ограничивается исключительно бэкэнд-системами..