Gaurav Tambi
Gaurav Tambi

Reputation: 33

I want to convert the categorical variable to numerical in Python

I have a dataframe having categorical variables. I want to convert them to the numerical using the following logic:

I have 2 lists one contains the distinct categorical values in the column and the second list contains the values for each category. Now i need to map these values in place of those categorical values.

For Eg:

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

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

I need to replace A with 3, B with 2, C and D with 1 and E with 2.

Is there any way to do this in Python.

I can do this by applying multiple for loops but I am looking for some easier way or some direct function if there is any.

Any help is very much appreciated, Thanks in Advance.

Upvotes: 1

Views: 1825

Answers (5)

satria rahman
satria rahman

Reputation: 1

import pandas as pd  

# Initialise data to dict.  
data = {'Nama': ['A','B','C','D'], 'Status': ['V','X','X','V']}  
  
# Change to dataframe
df = pd.DataFrame(data) 

df['label'] = df['Status'].map({'V': 1, 'X': 0})

df

Result:

enter image description here

Upvotes: 0

dmb
dmb

Reputation: 298

If you only need to replace values in one list with the values of other and the structure is like the one you say. Two list, same lenght and same position, then you only need this:

list_a = []
list_a = list_b

A more convoluted solution would be like this, with a function that will create a dictionary that you can use on other lists:

# 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

This will make a dictionary with the combinations you need. You pass the two list, then you can use that dictionary on other list:

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

Upvotes: 0

mad_
mad_

Reputation: 8273

Create a mapping dict

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

Or define a function and use 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)

Upvotes: 1

cyrus24
cyrus24

Reputation: 363

Suppose df is your data frame and "Category" is the name of the column holding your categories:

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

Upvotes: 0

Related Questions