如何将熊猫数据框从基于字符串的分类列转换为数字表示形式

时间:2018-07-31 03:55:26

标签: python pandas

我在数据框中有一个看起来像这样的列:

df['label']

['some_label', 'some_label', 'a_diff_label', 'a_diff_label',...]

我想将其转换为如下形式:

[1,1,0,0,...]

4 个答案:

答案 0 :(得分:2)

有很多方法可以做到这一点(等因素)

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

答案 1 :(得分:1)

您还可以使用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 :(得分:1)

我知道它已经被回答了,但是您可能希望使用从代码到标签的映射,反之亦然,并带有几个转换函数。像这样:

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)

答案 3 :(得分:0)

由于我发现的类似问题非常复杂且难以理解,因此我将发布一个简单的答案。

只需执行以下操作:

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