Я хочу преобразовать категориальную переменную в числовую в Python - PullRequest
0 голосов
/ 24 октября 2018

У меня есть датафрейм с категориальными переменными.Я хочу преобразовать их в числовое с использованием следующей логики:

У меня есть 2 списка, один из которых содержит различные категориальные значения в столбце, а второй список содержит значения для каждой категории.Теперь мне нужно сопоставить эти значения вместо этих категорических значений.

Например:

List_A = ['A', 'B', 'C', 'D', 'E']

List_B = [3,2,1,1,2]

Мне нужно заменить A на 3, B на 2, C и D на 1 и E на 2.

Есть ли способ сделать это в Python.

Я могу сделать это, применив несколько циклов for, но я ищу какой-то более простой способ или некоторую прямую функцию, если она есть.

Любая помощь очень ценится, спасибо заранее.

Ответы [ 4 ]

0 голосов
/ 24 октября 2018

Вы можете использовать решение из модуля машинного обучения scikit-learn.

OneHotEncoder

LabelEncoder

http://scikit -learn.org / stable / modules / generate / sklearn.preprocessing.OneHotEncoder.html http://scikit -learn.org / stable / modules / Генерируемый / sklearn.preprocessing.LabelEncoder.html

Панды "трудным" способом:

https://stackoverflow.com/a/29330853/9799449

0 голосов
/ 24 октября 2018

Предположим, df - это ваш фрейм данных, а "Category" - это название столбца, содержащего ваши категории:

df[df.Category == "A"] = 3,2, 1, 1, 2
df[(df.Category == "B") | (df.Category == "E") ] = 2
df[(df.Category == "C") | (df.Category == "D") ] = 1
0 голосов
/ 24 октября 2018

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

list_a = []
list_a = list_b

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

# we make a function
def convert_list(ls_a,ls_b):
    dic_new = {}
    for letter,number in zip(ls_a,ls_b):
        dic_new[letter] = number
    return dic_new

Это создаст словарь с нужными вам комбинациями.Вы передаете два списка, затем вы можете использовать этот словарь в другом списке:

List_A = ['A','B','C','D','E']
List_B = [3,2,1,1,2]

dic_new = convert_list(ls_a, ls_b)

other_list = ['a','b','c','d']

for _ in other_list:
    print(dic_new[_.upper()])

# prints
3
2
1
1

cheers

0 голосов
/ 24 октября 2018

Создайте карту отображения

List_A = ['A','B','C','D','E',]

List_B = [3,2,1,1,2]
d=dict(zip(List_A, List_B))

new_list=['A','B','C','D','E','A','B']
new_mapped_list=[d[v] for v in new_list if v in d]
new_mapped_list

Или определите функцию и используйте map

List_A = ['A','B','C','D','E',]

List_B = [3,2,1,1,2]

d=dict(zip(List_A, List_B))

def mapper(value):
    if value in d:
        return d[value]
    return None

new_list=['A','B','C','D','E','A','B']
map(mapper,new_list)
...