Использование LabelEncoder sklearn в столбце фрейма данных

Если у меня есть фрейм данных, скажем, df, и если

df["levels"] = pd.Series(["low", "low", "med", "low", "med", "high"])

Есть ли способ изменить это на:

df["levels"] = pd.Series([0,0,1,0,1,2])

Я пробовал использовать preprocessing.LabelEncoder (), чтобы преобразовать это, но он просто сворачивается в [0,1,2]. Я знаю, что могу просто сделать это с помощью циклов for, но было бы здорово, если бы для этого уже существовал какой-нибудь инструмент. Любая помощь приветствуется!


person Ammastaro    schedule 01.04.2018    source источник
comment
Что значит рушится? Пожалуйста, покажите свой код   -  person Vivek Kumar    schedule 02.04.2018


Ответы (2)


Есть два пути .. op1 category

pd.Series(["low", "low", "med", "low", "med", "high"]).astype('category').cat.codes
Out[1454]: 
0    1
1    1
2    2
3    1
4    2
5    0
dtype: int8

op2 factorize

pd.factorize(pd.Series(["low", "low", "med", "low", "med", "high"]))[0]
Out[1455]: array([0, 0, 1, 0, 1, 2], dtype=int64)
person BENY    schedule 01.04.2018

Я не уверен, как вы использовали sklearn для кодирования столбца строк, поскольку это не было включено в исходный пост. Однако вы можете использовать LabelEncoder(), выполнив следующие действия.

from sklearn.preprocessing import LabelEncoder

le = LabelEncoder()
le.fit(df.levels.unique())
df.levels = le.transform(df.levels)

   levels
0       1
1       1
2       2
3       1
4       2
5       0
person DJK    schedule 01.04.2018
comment
Я бы использовал: le.fit (df.levels.unique ()) или le.fit (df [levels] .unique ())? - person Ammastaro; 02.04.2018
comment
@Ammastaro, вы можете использовать либо - person DJK; 02.04.2018