1 回答

TA貢獻1801條經驗 獲得超8個贊
數據類型因列而異,因此在這里使用applywithfit_transform不起作用。它似乎可以正常工作,但在LabelEncoder操作結束時將適合最右邊的列,因此當您嘗試應用 時inverse_transform,LabelEncoder 會將其他列中的所有元素替換為它在最右邊的列。例如:
df = pd.DataFrame([{'A': 1, 'B': 'p'}, {'A': 1, 'B': 'q'}, {'A': 2, 'B': 'o'}, {'A': 3, 'B': 'p'}])
df
A B
0 1 p
1 1 q
2 2 o
3 3 p
df = df.apply(le.fit_transform)
df
A B
0 0 1
1 0 2
2 1 0
3 2 1 # Looks fine
df.apply(le.inverse_transform)
A B
0 o p
1 o q
2 p o
3 q p # Whoops
即使您一一遍歷列并執行fit_transformand ,您也會看到相同的結果inverse_transform。
在反轉之前,您需要將編碼器安裝到正確的列:
le = LabelEncoder()
df_encoded = pd.DataFrame(columns=df.columns)
df_decoded = pd.DataFrame(columns=df.columns)
for col in df.columns:
df_encoded[col] = le.fit_transform(df[col])
df_encoded
A B
0 0 1
1 0 2
2 1 0
3 2 1
for col in df.columns:
le = le.fit(df[col])
df_decoded[col] = le.inverse_transform(df_encoded[col])
df_decoded
A B
0 1 p
1 1 q
2 2 o
3 3 p # Yeay
添加回答
舉報