【问题标题】:I want to convert the categorical variable to numerical in Python我想在 Python 中将分类变量转换为数值
【发布时间】:2019-03-29 07:46:08
【问题描述】:

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

我有 2 个列表,其中一个包含列中不同的分类值,第二个列表包含每个类别的值。现在我需要映射这些值来代替那些分类值。

例如:

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

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

我需要用 3 替换 A,用 2 替换 B,用 1 替换 C 和 D,用 2 替换 E。

有没有办法在 Python 中做到这一点。

我可以通过应用多个 for 循环来做到这一点,但我正在寻找一些更简单的方法或一些直接函数(如果有的话)。

非常感谢任何帮助,在此先感谢。

【问题讨论】:

    标签: python list dataframe categorical-data


    【解决方案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)
    

    【讨论】:

    • 感谢 mad_ 这真的很有帮助,正是我想要的。
    【解决方案2】:

    假设 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
    

    【讨论】:

    • 感谢 shweta24,但如果我的专栏中只有 5-6 个类别,这将起作用。但在我的数据集中有 000 个类别。
    【解决方案3】:

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

    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
    

    干杯

    【讨论】:

    • A 等效值应该是 3 而不是 1。
    【解决方案4】:

    【讨论】:

    • 这不相关
    猜你喜欢
    • 2018-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-14
    • 2023-02-13
    • 1970-01-01
    • 1970-01-01
    • 2018-05-18
    相关资源
    最近更新 更多