Menggunakan LabelEncoder sklearn pada kolom kerangka data

Jika saya memiliki kerangka data, ucapkan df, dan jika

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

Apakah ada cara untuk mengubahnya menjadi:

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

Saya sudah mencoba menggunakan preprocessing.LabelEncoder() untuk mengubahnya, tetapi ia langsung runtuh menjadi [0,1,2]. Saya tahu saya bisa melakukan ini dengan loop for, tetapi akan lebih bagus jika sudah ada beberapa alat untuk melakukan ini. Bantuan apa pun sangat kami hargai!


person Ammastaro    schedule 01.04.2018    source sumber
comment
Apa maksudmu itu runtuh? Silakan tunjukkan kode Anda   -  person Vivek Kumar    schedule 02.04.2018


Jawaban (2)


Ada dua cara.. 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

Saya tidak yakin bagaimana Anda menggunakan sklearn untuk menyandikan kolom string Anda, karena itu tidak disertakan dalam postingan asli. Namun, Anda dapat menggunakan LabelEncoder() dengan mengikuti langkah-langkah di bawah ini

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
Apakah saya akan menggunakan: le.fit(df.levels.unique()) atau le.fit(df[levels].unique())? - person Ammastaro; 02.04.2018
comment
@Ammastero, Anda dapat menggunakan keduanya - person DJK; 02.04.2018