我在数据框中有一个看起来像这样的列:
df['label']
['some_label', 'some_label', 'a_diff_label', 'a_diff_label',...]
我想将其转换为如下形式:
[1,1,0,0,...]
答案 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)