我想在Python中将分类变量转换为数值

问题描述 投票:0回答:5

我有一个包含分类变量的数据框。我想使用以下逻辑将它们转换为数字:

我有 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 循环来做到这一点,但我正在寻找一些更简单的方法或一些直接的函数(如果有的话)。

非常感谢任何帮助,提前致谢。

python list dataframe categorical-data
5个回答
1
投票

创建映射字典

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)

0
投票

假设 df 是您的数据框,“类别”是包含类别的列的名称:

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
投票

如果您只需要将一个列表中的值替换为其他列表中的值,并且结构就像您所说的那样。两个列表,相同的长度和相同的位置,那么你只需要这个:

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

干杯



0
投票
import pandas as pd  
    
# Initialise data to dict.  
data = {'Nama': ['A','B','C','D'], 'Status': ['V','X','X','V']}  
  
df = pd.DataFrame(data) 

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

df
© www.soinside.com 2019 - 2024. All rights reserved.