代码之家  ›  专栏  ›  技术社区  ›  netskink

如何将pandas数据帧从基于字符串的分类列转换为数字表示

  •  1
  • netskink  · 技术社区  · 7 年前

    我在一个数据框中有一个列,如下所示:

    df['label']
    
    ['some_label', 'some_label', 'a_diff_label', 'a_diff_label',...]
    

    我想把它转换成这样:

    [1,1,0,0,...]
    
    4 回复  |  直到 7 年前
        1
  •  1
  •   niraj    7 年前

    你也可以使用 LabelEncoder sklearn 如果需要,它还可以将标签编码转换回来。( sklearn LabelEncoder documentation ):

    import pandas as pd
    from sklearn import preprocessing
    
    df = pd.DataFrame({'label': ['some_label', 'some_label', 'a_diff_label', 'a_diff_label']})
    
    le = preprocessing.LabelEncoder()
    df['label'] = le.fit_transform(df['label'])
    
        2
  •  2
  •   BENY    7 年前

    有很多方法可以达到这个目的(等,因素)

    pd.Series(['some_label', 'some_label', 'a_diff_label', 'a_diff_label']).astype('category').cat.codes
    Out[19]: 
    0    1
    1    1
    2    0
    3    0
    dtype: int8
    
        3
  •  1
  •   JAponte    7 年前

    我知道已经有人回答了,但是您可能需要使用一个从代码到标签和viceversa的映射,以及一些转换函数。这样地:

    import pandas as pd
    
    col_map = pd.DataFrame.from_dict({
        'some_label': 0,
        'a_diff_label': 1,
    }, orient='index')
    
    def label_to_code(label):
        return col_map[col_map.index == label][0].values[0]
    
    def code_to_label(code):
        return col_map[col_map[0] == code].index[0]
    
    df = pd.DataFrame(data={'label': ['some_label', 'some_label', 'a_diff_label', 'a_diff_label']})
    df['code'] = df['label'].apply(label_to_code)
    df['another_label'] = df['code'].apply(code_to_label)
    print(df)
    
        4
  •  0
  •   netskink    7 年前

    因为我发现的类似问题非常复杂,很难理解,所以我发布了一个简单的答案。

    就这样做:

    df['label'] = (df['label'] == 'some_label').astype(int)