การใช้ LabelEncoder ของ sklearn บนคอลัมน์ของ dataframe

ถ้าฉันมี dataframe ให้พูดว่า 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 loops แต่คงจะดีไม่น้อยหากมีเครื่องมือบางอย่างอยู่แล้วในการดำเนินการนี้ ขอขอบคุณความช่วยเหลือใดๆ


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